关于array of const 的问题,先给100分,有答案的再给100分!(100分)

  • 主题发起人 主题发起人 youou
  • 开始时间 开始时间
Y

youou

Unregistered / Unconfirmed
GUEST, unregistred user!
1.FORMAT('%s,%s,%s,.....%d,%f...',[.......])
[]有很多,总不能一个个写出来吧?
有没有好方法;
即用一个已赋值的变量或是常量?
FORMAT('%s,%s,%s,.....%d,%f...',ARRAYCON)

有人提议这么写:
var
s:string;
aVR: array of TVarRec;
begin

s:='2002-5-6';
SetLength(aVR, 1);
for i:=Low(aVR) to High(aVR) do
with aVR do
begin
VAnsiString :=@s; // 看看TVarRec的成员
end;

SQLStr:='Insert into DellType(riqi)';
SQLStr:=SQLStr+' Values('+'''%s'''+')';

SQLStr:=Format(SQLStr,aVR); //可是会出现参数类型不一至的...这该如何解决....

2.我是有56个字段要插入一个表中,所以想到用上面的方法,有更好的办法吗?



 
个人认为除了你这个方法外,应该没有简单的方法了1
 
或者采用一个笨办法:将你所说的56个数据库表的字段类型均设为字符型。应该不
会出现参数类型不一致了。
 
我做测试就是用字符型的!
 
---->[]有很多,总不能一个个写出来吧?
没办法, 只有一个一个写。 因为编译器生成代码时直接将[..]中间的具体内容写成语句了。
 
-->SQLStr:=Format(SQLStr,aVR); //可是会出现参数类型不一至的...这该如何解决....
不要写format(......)
直接用asm写, 将aVR的内容复制到堆栈中, 设置好EAX, ECX, EDX, EBP寄存器然后调用call Format
 
用 循环+参数
var
s: string;
begin
s := 'Insert into table1 (';
for i;=1 to 56 do
s := s+'Field'+IntTostr(i)+',';
system.delete(s,Length(s),1);
s := s+' values ('
for i:=1 to 56 do
for i;=1 to 56 do
s := s+':Field'+IntTostr(i)+',';
system.delete(s,Length(s),1);
s := s+')';

下面用 参数
AdoQuery1.parameters.value := 'asdfasd';
end;
 
对格式化语句作个循环,每次只输出一个参数,不也简单有效。
 
后退
顶部