使用Foxpro将数据插入MYSQL

时间:2013-05-03 03:26:13

标签: mysql insert foxpro

在使用本机表的FoxPro中,我通常在插入新数据时执行此操作。

Sele Table
If Seek(lcIndex)
     Update Record
Else
     Insert New Record
EndIf

如果我将MYSQL用作我的数据库,那么最好和最快的方法是什么 使用SPT在FoxPro代码中执行此操作?我将更新大量记录。 最多80,000笔交易。

谢谢, 赫伯特

3 个答案:

答案 0 :(得分:1)

我只会采取杰里提供的更进一步。当尝试处理任何插入,更新,删除与SQL传递,它可能会遇到基于SQL注入的类似原则的可怕的调试问题。

如果您的“myValue”字段有单引号,双引号,双连字符(表示注释)怎么办?你会被软管。

参数化您的语句,例如使用VFP变量引用,然后使用“?”在你的sql语句中限定应该使用哪个“值”。 VFP正确通过。这也有助于数据类型,例如在构建“myStatement”时将数字转换为字符串。

此外,在VFP中,您可以使用TEXT / 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" )

答案 1 :(得分:0)

您可以在Visual Foxpro应用程序中使用SQL Pass through。查看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

答案 2 :(得分:0)

这将是您对SQLEXEC的语句字符串:

INSERT INTO SOMETABLE 
SET KEYFIELD = ?M.KEYFIELD, 
FIELD1 = ?M.FIELD1
...
FIELDN = ?M.FIELDN
ON DUPLICATE KEY UPDATE
FIELD1 = ?M.FIELD1
...
FIELDN = ?M.FIELDN

请注意,ON DUPLICATE KEY UPDATE部分不包含键字段,否则它通常与插入相同(或者,如果您想在记录已存在时执行其他操作,则不会)