How to use SQL with FOXCDX

This forum is for eXpress++ general support.
Post Reply
Message
Author
User avatar
rdonnay
Site Admin
Posts: 4722
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

How to use SQL with FOXCDX

#1 Post by rdonnay »

Here is a small application that can use the Xbase++ SELECT statement to create a SQL result set in an array of objects. The object array can then be browsed and edited using eXpress++. The sample only allows editing of the name column.

Code: Select all

#include "dac.ch"
#INCLUDE "dcdialog.CH"
#INCLUDE "appevent.CH"

#Pragma Library("dclipx.lib")

FUNCTION Main

LOCAL GetList[0], GetOptions, aObjects, oBrowse, oBitmap, oStatic,  nPointer := 1, i, lStatus

DbeLoad( "foxdbe" )
DbeLoad( "cdxdbe" )
DbeBuild( "foxcdx", "foxdbe", "cdxdbe" )

Use parts VIA 'FOXCDX'

SELECT partno as Number, ;
   partname as Name, ;
   parttype as Type, ;
   bmpImage as Image, ;
   RecNo() as Record ;
   FROM parts ;
   INTO OBJECTS aObjects

FOR i := 1 TO Len(aObjects)
  aObjects[i]:name := Pad(aObjects[i]:name,20)   // Pad the data for cell editing
NEXT

oBitmap := XbpBitmap():new():create()

@ 0,0 DCBROWSE oBrowse ;
      SIZE 72,22 ;
      DATA aObjects ;
      HEADLINES 2 ;
      POINTER nPointer ;
      FONT '10.Lucida Console' ;
      EDIT xbeBRW_ItemSelected MODE DCGUI_BROWSE_EDITDOWN ;
      ITEMMARKED {||oBitmap:setBuffer(aObjects[nPointer]:image), oStatic:invalidateRect()}

DCBROWSECOL OBJECTVAR Number HEADER 'Part;Number' WIDTH 10 PARENT oBrowse PROTECT {||.t.} 

DCBROWSECOL OBJECTVAR Name HEADER 'Part;Name' WIDTH 30 PARENT oBrowse 

DCBROWSECOL OBJECTVAR Type HEADER 'Part;Type' WIDTH 10 PARENT oBrowse PROTECT {||.t.}

DCBROWSECOL OBJECTVAR Record HEADER 'Record;Number' WIDTH 6 PICTURE '99999' PARENT oBrowse ;
   PROTECT {||.t.}

@ 0, 74 DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP OBJECT oStatic ;
         CAPTION oBitmap SIZE 43,12 ;
         RESIZE DCGUI_RESIZE_REPOSONLY

DCGETOPTIONS RESIZE RESIZEDEFAULT DCGUI_RESIZE_RESIZEONLY

DCREAD GUI ;
   FIT ;
   TITLE 'Browsing a Fox Database SQL Query' ;
   OPTIONS GetOptions ;
   TO lStatus ;
   ADDBUTTONS

IF lStatus
  PARTS->(GatherData(aObjects))
ENDIF

RETURN nil

* --------

PROC appsys ; RETURN

* --------

FUNCTION GatherData( aObjects )

LOCAL i

FOR i := 1 TO Len(aObjects)
  DbGoTo(aObjects[i]:record)
  IF dbRLock()
    REPLACE partname WITH aObjects[i]:name
    dbRUnlock()
  ENDIF
NEXT

RETURN nil
Screen.JPG
Screen.JPG (77.03 KiB) Viewed 8991 times
Attachments
FOXSQL.zip
(2.43 MiB) Downloaded 869 times
The eXpress train is coming - and it has more cars.

Post Reply