gpt4 book ai didi

mysql - Delphi XE10.x FireDAC - 查询期间错误失去与 MySQL 服务器的连接

转载 作者:行者123 更新时间:2023-11-28 23:14:40 25 4
gpt4 key购买 nike

我正在使用以下代码构建这个简单的查询:

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

杨瑜

最佳答案

好吧,我终于找到了真正的问题并解决了它......

碰巧 dumb FireDAC 的查询 组件不支持原始帖子中所述格式的查询。我必须按照 SQL 规范构建传统的插入查询。

虽然 MySQL 支持使用 SET 关键字的查询,而且我一直在我的 PHP 项目中使用它,所以不存在查询错误的问题。

好的,我在另一个论坛中的其他开发人员的建议/帮助下构建了一个参数化查询并像下面这样使用它:

FDQuery1.SQL.Text := 'INSERT INTO album(customer_id, album_name_c, album_name_s, album_size, album_paper, album_cover, album_binding, album_coating, starts_from, total_files, lab_id, upload_date, album_uploaded) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?);';

FDQuery1.Params.Items[0].AsInteger := CustomerID;
FDQuery1.Params.Items[1].AsString := ProjectFolderName;
FDQuery1.Params.Items[2].AsString := ProjectFolderNameOnServer;
FDQuery1.Params.Items[3].AsString := AlbumSize;
FDQuery1.Params.Items[4].AsString := PaperFinish;
FDQuery1.Params.Items[5].AsString := Cover;
FDQuery1.Params.Items[6].AsString := Binding;
FDQuery1.Params.Items[7].AsString := Coating;

if chkLeft.Checked then
FDQuery1.Params.Items[8].AsString := '1'
else
FDQuery1.Params.Items[8].AsString := '0';

if chkRight.Checked then
FDQuery1.Params.Items[8].AsString := '2'
else
FDQuery1.Params.Items[8].AsString := '0';

FDQuery1.Params.Items[9].AsInteger := lstFiles.Count;
FDQuery1.Params.Items[10].AsInteger := LabID;
FDQuery1.Params.Items[11].AsDate := Now;
FDQuery1.Params.Items[12].AsString := '1';

FDQuery1.Execute;

感谢这个参数化查询,我不必使用 Chr(39) 向 varchar 和数据字段数据添加单引号。

我希望这能帮助其他开发者解决他们可能面临的类似问题。

问候,

杨瑜

关于mysql - Delphi XE10.x FireDAC - 查询期间错误失去与 MySQL 服务器的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com