在使用本機表的FoxPro中,我通常在插入新數據時執行此操作。使用Foxpro將數據插入MYSQL
Sele Table
If Seek(lcIndex)
Update Record
Else
Insert New Record
EndIf
如果我將使用MySQL作爲我的數據庫,什麼是使用SPT來 最好和最快的方式做到這一點在FoxPro代碼?我將更新大量的記錄。 最多80,000筆交易。
感謝, 赫伯特
在使用本機表的FoxPro中,我通常在插入新數據時執行此操作。使用Foxpro將數據插入MYSQL
Sele Table
If Seek(lcIndex)
Update Record
Else
Insert New Record
EndIf
如果我將使用MySQL作爲我的數據庫,什麼是使用SPT來 最好和最快的方式做到這一點在FoxPro代碼?我將更新大量的記錄。 最多80,000筆交易。
感謝, 赫伯特
您可以在您的Visual FoxPro應用程序中使用SQL通過。查看用於連接到數據庫的SQLCONNECT()或SQLSTRINGCONNECT()。另請參閱SQLEXEC()來執行您的SQL語句。
例如:
myValue = 'Test'
myHandle = SQLCONNECT('sqlDBAddress','MyUserId','MyPassword')
myStatement = "UPDATE [MySchema].[Mytable] SET myField = '" + myValue + "' WHERE myPk = 1"
=SQLEXEC(myHandle, myStatement,"myCursor")
=SQLEXEC(myHandle, "SELECT * FROM [MySchema].[Mytable] WHERE myPk = 1","myCursor")
SELECT myCursor
BROWSE LAST NORMAL
我將只需要傑裏提供什麼一步。當試圖處理任何插入,更新,刪除和SQL傳遞時,它會根據SQL注入的相似原理運行成可怕的調試問題。
如果您的「myValue」字段有單引號,雙引號,雙連字符(表示註釋),該怎麼辦?你會被打倒。
參數化您的語句,如使用VFP變量引用,然後使用「?」在你的sql語句中定義應該使用哪個「值」。 VFP正常通過。這也有助於數據類型,例如在構建「myStatement」時將數字轉換爲字符串。
此外,VFP,可以使用文本/ ENDTEXT簡化命令的可讀性
lcSomeStringVariable = "My Test Value"
lnANumericValue = 12.34
lnMyIDKey = 389
TEXT to lcSQLCmd NOSHOW PRETEXT 1+2+8
update [YourSchems].[YourTable]
set SomeTextField = ?lcSomeStringVariable,
SomeNumberField = ?lnANumericValue
where
YourPKColumn = ?lnMyIDKey
ENDTEXT
=sqlexec(yourHandle, lcSQLCmd, "localCursor")
這將是SQLEXEC您的語句字符串:
INSERT INTO SOMETABLE
SET KEYFIELD = ?M.KEYFIELD,
FIELD1 = ?M.FIELD1
...
FIELDN = ?M.FIELDN
ON DUPLICATE KEY UPDATE
FIELD1 = ?M.FIELD1
...
FIELDN = ?M.FIELDN
注意,對重複KEY UPDATE部分不包含關鍵字段,否則它通常與插入相同(或者,如果你想在記錄已經存在時做其他事情)