我要把很长的数据插入到表中,如果用string拼装起来提示错误
[Error] Unit1.pas(29): String literals may have at most 255 elements
字段类型是varchar(500000);想问大家有没好的办法?
procedure TForm1.Button1Click(Sender: TObject);
var str,str1,str2,str3,str4:string;
begin
str1:='使得法国第三方豆腐干豆腐干梵蒂冈的豆腐干豆腐干第三方个1';
str2:='八岁的三大法宝撒到了分别萨洛夫洛夫德洛夫不是大风2';
str3:='撒旦法士大夫摩萨德皮肤开始大幅士大夫撒旦法士大夫3';
str4:='士大夫撒旦法送达法律士大夫士大夫士大夫士大夫士大夫士大夫4';
ASQLite3Query1.SQL.Clear;
ASQLite3Query1.SQL.Add('insert into dbRevSms values('+edit1.Text);
ASQLite3Query1.SQL.Add(str1);
ASQLite3Query1.SQL.Add(str2);
ASQLite3Query1.SQL.Add(str3);
ASQLite3Query1.SQL.Add(str4);
ASQLite3Query1.SQL.Add(edit2.Text+')');//这样拼装sql.add有错误的。
// showmessage(ASQLite3Query1.SQL.CommaText);
ASQLite3Query1.Open;
end;
[Error] Unit1.pas(29): String literals may have at most 255 elements
字段类型是varchar(500000);想问大家有没好的办法?
procedure TForm1.Button1Click(Sender: TObject);
var str,str1,str2,str3,str4:string;
begin
str1:='使得法国第三方豆腐干豆腐干梵蒂冈的豆腐干豆腐干第三方个1';
str2:='八岁的三大法宝撒到了分别萨洛夫洛夫德洛夫不是大风2';
str3:='撒旦法士大夫摩萨德皮肤开始大幅士大夫撒旦法士大夫3';
str4:='士大夫撒旦法送达法律士大夫士大夫士大夫士大夫士大夫士大夫4';
ASQLite3Query1.SQL.Clear;
ASQLite3Query1.SQL.Add('insert into dbRevSms values('+edit1.Text);
ASQLite3Query1.SQL.Add(str1);
ASQLite3Query1.SQL.Add(str2);
ASQLite3Query1.SQL.Add(str3);
ASQLite3Query1.SQL.Add(str4);
ASQLite3Query1.SQL.Add(edit2.Text+')');//这样拼装sql.add有错误的。
// showmessage(ASQLite3Query1.SQL.CommaText);
ASQLite3Query1.Open;
end;
var str,str1,str2,str3,str4:string;
begin
str1:='使得法国第三方豆腐干豆腐干梵蒂冈的豆腐干豆腐干第三方个1';
str2:='八岁的三大法宝撒到了分别萨洛夫洛夫德洛夫不是大风2';
str3:='撒旦法士大夫摩萨德皮肤开始大幅士大夫撒旦法士大夫3';
str4:='士大夫撒旦法送达法律士大夫士大夫士大夫士大夫士大夫士大夫4';
ASQLite3Query1.SQL.Clear;
ASQLite3Query1.SQL.Add('insert into dbRevSms values('''+edit1.Text);
ASQLite3Query1.SQL.Add(str1);
ASQLite3Query1.SQL.Add(str2);
ASQLite3Query1.SQL.Add(str3);
ASQLite3Query1.SQL.Add(str4);
ASQLite3Query1.SQL.Add(edit2.Text+''')');//这样拼装sql.add有错误的。
// showmessage(ASQLite3Query1.SQL.CommaText);
ASQLite3Query1.Open;
end;
用赋值
inset into a (a) values (:a);
如果create 很多字段(60个)
create table tablename (字段1,字段2字段60)?
这样写也是提示错误
procedure TForm1.Button1Click(Sender: TObject);
var str,str1,str2,str3,str4:string;
begin
str1:='使得法国第三方豆腐干豆腐干梵蒂冈的豆腐干豆腐干第三方个1';
str2:='八岁的三大法宝撒到了分别萨洛夫洛夫德洛夫不是大风2';
str3:='撒旦法士大夫摩萨德皮肤开始大幅士大夫撒旦法士大夫3';
str4:='士大夫撒旦法送达法律士大夫士大夫士大夫士大夫士大夫士大夫4';
ASQLite3Query1.SQL.Clear;
ASQLite3Query1.SQL.Add('insert into dbRevSms values('''+edit1.Text+''','''+str1+str2+str3+str4+''','''+edit2.Text+''')');
showmessage(ASQLite3Query1.SQL.CommaText);
ASQLite3Query1.Open;
end;结果:数据插进去了,而且也能显示到dbgrid中。
但是用数据库打开则看不到数据,为什么呢?
1.在数据库中字段内容巨大的时候,一般情况下是不能直接看到其内容的,只能选中打开才能看到。如果不是就不知道你是什么情况了。
2. 看到你的做法,想给你点建议。插入数据字字符字段的时候,由于字符内容不确定,可能含有特殊字符,如果采用
'insert into dbRevSms values(''' + edit1.Text + ''')'
这种使用各字符串拼装成一个大字符串的方法,然后用大字符串去提交给SQL解析,由于小字符串的内容不确定,可能造成SQL解析不正确,或者是造成不可预料的后果(极端情况下,例如数据库被删除等,与SQL注入式攻击类似)。
所以此类需要使用字符串变量的语句应该使用控件中提供的参数功能,如下所示
fQry.Close;
fQry.SQL.Clear;
fQry.SQL.Text := 'insert into dbRevSms values(:TemStr1)';
fQry.ParamCheck := True;
with fQry.Parameters.ParamByName('TemStr1') do
begin
DataType := ftString;
Value := '乱七八糟的内容等等';
end;
fQry.ExecSQL;
如此,不管你的字符串的内容到底是什么,都可以保证你要的插入功能正常执行。
一般如果内容非常多的话,建议使用ansistring等代替255长度的string
+'Values(:d1,:d2,:d3...') ;
Parameters.ParamByName('d1').Value:=...;
Parameters.ParamByName('d2').Value:=...;
Parameters.ParamByName('d2').Value:=...;
.
.
.
ExecSQL;
qry_weekdetail.Close;
qry_weekdetail.SQL.Clear;
qry_weekdetail.SQL.Add( ' SELECT D.CB,D.BM,D.KB,D.XB,C.COLAID AS GH,D.Full_Name AS XM,C.WEEKS,C.TTL,''>''+'''+Trim(dxSpinEdit2.Text)+'''+''Hr'' as TJ,');
qry_weekdetail.SQL.Add( ' CONVERT(nvarchar(10),DATEADD(DAY,7*( '''+Trim(p)+'''-DATEPART(WEEK,GETDATE())),DATEADD(DAY,2-DATEPART(WEEKDAY,GETDATE()),GETDATE())),120)+''~''+ ');
qry_weekdetail.SQL.Add( ' CONVERT(nvarchar(10),DATEADD(DAY,6,DATEADD(DAY,7*( '''+Trim(p)+'''-DATEPART(WEEK,GETDATE())),DATEADD(DAY,2-DATEPART(weekday,GETDATE()),GETDATE()))),120) as Isdatetimes ');
qry_weekdetail.SQL.Add( ' FROM ( SELECT COLAID,SUM(HR) AS TTL,WEEKS FROM (SELECT A.COLAID,A.COLWKT+A.COLJBT+A.COLXXRJB+A.COLJJRJB as HR, ');
qry_weekdetail.SQL.Add( ' DATEPART(WK,DATEADD(DAY,-1,A.COLRQ)) as WEEKS FROM HR_EMPLOYEE_DAY A ) B WHERE WEEKS='''+ Trim(p)+''' GROUP BY COLAID,WEEKS ');
qry_weekdetail.SQL.Add( ' ) C LEFT JOIN Res_Hrd_Temp D ON C.COLAID=D.Account_Id where C.TTL>'''+ Trim(dxSpinEdit2.Text)+''' AND D.BM='''+ Trim(z)+''' Order by C.TTL desc ');
qry_weekdetail.Open;
adotable.fieldbyname('').asstring:='';
这样就不用怕字段长了
最大varchar(8000),或varchar(max)(sql2005开始支持,最多2G)
哦。sqlite?
procedure TForm1.Button1Click(Sender: TObject);
var str,str1,str2,str3,str4:string;
begin
str1:='使得法国第三方豆腐干豆腐干梵蒂冈的豆腐干豆腐干第三方个1';
str2:='八岁的三大法宝撒到了分别萨洛夫洛夫德洛夫不是大风2';
str3:='撒旦法士大夫摩萨德皮肤开始大幅士大夫撒旦法士大夫3';
str4:='士大夫撒旦法送达法律士大夫士大夫士大夫士大夫士大夫士大夫4';
ASQLite3Query1.SQL.Clear;
ASQLite3Query1.SQL.Add('insert into dbRevSms values('+quotedstr(
edit1.Text+str1+str2+str3+str4+edit2.Text
)+')');
showmessage(ASQLite3Query1.SQL.Text);
ASQLite3Query1.Open;
end;