SELECT 0 cxCustomer = SYS(3) CREATE CURSOR cxCustomer ( CustAlias C(15),; NmCust C(40),; Contact C(40),; Address M(4))) * Why cxCustomer = sys(3) ? Maybe used as a variable elsewhere. * Why do you ever need to create this and put SQL results in it ? * Assuming you've a good reason to do so * Above code is almost equivalant to (except sys(3)) CREATE CURSOR cxCustomer ( ; CustAlias C(15),; NmCust C(40),; Contact C(40),; Address M) * Nothing important here - just preferenceI didn't understand why multiple SQLExec to same table, but probably changing connection in between. Since you're doing it once you could drop the SQLPrepare (unused lnSQLExecSuccess as well):
lnSQLExecSuccess = SQLPREPARE(lnSQLConnHandle, ; "SELECT * from CUSTOMER order by CustAlias", "RESULTS") lnSQLConnHandle = SQLSTRINGCONNECT(lcSQLConnStr) IF lnSQLConnHandle < 1 LOCAL laErrArray[1] AERROR(laErrArray) WAIT WINDOW "Unable to connect:" + CHR(13) + laErrArray[1,2] RETURN .F. ENDIF lnSQLExecSuccess = SQLPREPARE(lnSQLConnHandle, ; "SELECT * from CUSTOMER order by CustAlias", "RESULTS") lnSQLExecSuccess = SQLEXEC(lnSQLConnHandle) IF lnSQLExecSuccess <> 1 LOCAL laError[1] AERROR(laError) WAIT WINDOW "SQLEXEC() Failed:" + CHR(13) + laError[1,2] ENDIFCould be replaced by :
lnSQLConnHandle = Sqlstringconnect(lcSQLConnStr) If lnSQLConnHandle < 0 Local laErrArray[1] Aerror(laErrArray) Wait Window "Unable to connect:" + Chr(13) + laErrArray[1,2] Return .F. Endif If ( SQLEXEC(lnSQLConnHandle, ; "SELECT * from CUSTOMER order by CustAlias", "RESULTS") ) < 0 Local laError[1] Aerror(laError) Wait Window "SQLEXEC() Failed:" + Chr(13) + laError[1,2] EndIfAnd finally (if cxCustomer ever needed) :
select customer zap ... thisform...Could be replaced by :
SELECT cxCustomer Zap && Needed ? Append From RESULTS THISFORM.grdCustomer.REFRESH()If you need a structure like you did (for i=1 to reccount()..endfor block)then do it like this :
Select RESULTS scan Scatter Memvar Memo Insert Into cxCustomer From Memvar EndscanCetin