【发布时间】:2017-11-08 15:26:41
【问题描述】:
我正在使用以下代码构建这个简单的查询:
FDQuery1.SQL.Text := 'INSERT INTO album SET customer_id=' + Chr(39) + IntToStr(CustomerID) + Chr(39) + ',lab_id=' + Chr(39) + IntToStr(LabID) + Chr(39) +
', album_name_c = ' + Chr(39) + ProjectFolderName + Chr(39) +
', album_name_s = ' + Chr(39) + ProjectFolderNameOnServer + Chr(39) +
' ,album_size=' + Chr(39) + txtAlbumSize.Text + Chr(39) +
', album_paper=' + Chr(39) + txtPaperFinish.Text + Chr(39) +
', album_cover=' + Chr(39) + txtCover.Text + Chr(39) +
', album_binding=' + Chr(39) + txtBinding.Text + Chr(39) +
', album_coating=' + Chr(39) + txtCoating.Text + Chr(39) +
', starts_from=' + Chr(39) + BoolToStr(chkRight.Checked) + Chr(39) +
'; SELECT LAST_INSERT_ID() AS RecID;';
但是当我调用 FDQuery1.OpenOrExecute 时,我收到了本文主题中所述的错误消息。
当前查询长度约为 299 个字符。
我在互联网上某处读到查询长度应小于 255 个字符,因此我也尝试缩短查询但将其长度保持在 255 个字符以下。
但我仍然收到相同的错误消息。
我在这里做错了什么请指导我。
TIA
杨洋
【问题讨论】:
-
也许这对stackoverflow.com/q/10563619/8041231 有帮助(这里不应该是查询长度而不是它的执行时间)。并开始使用参数(除了保护您的应用程序免受 SQL 注入外,如果您经常执行此查询,则查询的性能可以迅速提高)。
-
我无法设置连接超时,因为我在 Delphi 中编程并且不使用某些第三方数据库管理软件。
-
我尝试向其中插入数据的 MySQL 服务器托管在 Go Daddy 服务器上。如果我使用选择查询,我可以从服务器获取数据并且一切正常,但我无法插入或更新任何数据...
-
嗯,那就没什么好建议的了。您可以“调整”
ReadTimeout和/或WriteTimeout连接字符串参数,但仍有可能是服务器将您切断。不过,首先我会检查为什么执行查询需要这么长时间(多长时间,任何触发器,索引?)。如果这是一个合理的时间,我会咨询服务器管理员的超时时间(因为 FireDAC 默认为足够的超时时间)。并且在任何情况下都使用查询参数。 -
我什么都试过了。查询不计时。我能够使用 SELECT 查询从服务器检索数据。但是当我尝试在服务器上惰性/更新数据时,它会立即崩溃并显示上述消息,而无需任何处理时间段。我检查并仔细检查了超时,但这并没有发生,因为在执行 FDQuery1.OpenOrExecute 时立即抛出错误消息。