0

使用 Delphi 7 和 SQL Server 2005,我试图将多行参数(Stringlist.text)传递给 TAdoQuery 插入脚本。插入成功,但是当我从字段中取回数据时,我取

Line 1  Line 2  Line 3

代替

Line 1  
Line 2  
Line 3

表中的字段类型是 nvarchar(MAX),我无法将其更改为任何其他类型,该表不是我的。我试图将参数类型从宽字符串更改为 ftMemo,但没有任何变化。任何想法?

var
  QRDestLicenze: TADOQuery;
  LsLic := TStringList;

begin
  LsLic := TStringList.Create;
  LsLic.Add('Line 1');
  LsLic.Add('Line 2');
  LsLic.Add('Line 3');
  QRDestLic.Parameters.FindParam('FieldName).Value := LsLic.Text;
  QRDestLic.ExecSQL;
end;
4

1 回答 1

0

尽管使用的是 Delphi 6 和 SQL Server 2008,但我创建了一个完全相同的演示。

  Memo1.Lines.Clear;
  Memo1.Lines.Add('Line 1');
  Memo1.Lines.Add('Line 2');
  Memo1.Lines.Add('Line 3');

  ADOQuery1.SQL.Text := 'INSERT INTO Absences '+
    '(Employee, Date_from, Notes) '+
    'VALUES (99999, ''16/04/2013'', :sNotes)';
  ADOQuery1.Parameters.ParamValues['sNotes'] := Memo1.Lines.Text;
  ADOQuery1.ExecSQL;

  ADOQuery1.SQL.Text := 'SELECT Notes FROM Absences '+
    'WHERE Employee = 99999';
  ADOQuery1.Open;
  Memo2.Lines.Text := ADOQuery1.FieldByName('Absence_notes').AsString;

这按预期工作,显示:

Line 1
Line 2
Line 3

在两个备忘录中。

“Notes”字段的类型为 VARCHAR(Max)。

我将参数类型保留为默认值 (ftString),并且没有更改 TADOConnection 或 TADOQuery 上的其他默认设置。

我使用“Microsoft OLE DB Provider for SQL Server”作为 ADO 数据链接提供程序。

我们是否可以尝试重现您的问题?

于 2013-04-16T09:23:39.930 回答