- 作者:zhaozj
- 发表时间:2020-12-23 10:58
- 来源:未知
复杂的SQL我从不手工写,都是在EXCEL中利用现有的表格直接粘贴到源程序中的,下面我详细介绍这种方法。下面这个插入过程有没有可读性?要知道每一行'+'号前面的内容都是从现成的EXCEL中直接粘贴过来的,工作量很小。pu_insert('fhd',[ //写发货单到数据库中 ' Fid integer 工厂代号 '+ factid ' FHDCode Varchar 20 单据编号 '+ cxbuttonedit1.text ' OrderNo Varchar 20 必填 定单编号 '+ cxtextedit3.text ' FHDDate datetime 必填 发货日期 '+ pu_today ' Remark Varchar 200 备注 '+ cxtextedit6.text ' car Varchar 10 车队代号 '+ cxtextedit1.text ' receiverman Varchar 10 收货人 '+ cxtextedit5.text ' DeliverTo Varchar 80 交货地点 '+ cxtextedit2.text ]);
===========pu_insert过程的delphi源码如下====================procedure pu_insert(tablename:string;sarr:array of string);var rets,s,s1,s2:string;i,j,k,m,l:integer;c:char;beginrets:='(';l:=high(sarr);for i:=0 to l do begin s:=sarr[i];k:=0; s1:=''; m:=length(s); for j:=0 to m do begin if s[j]=#9 then inc(k) else begin if k=1 then s1:=s1+s[j]; end; end; if i=l then rets:=rets+s1+') values(' else rets:=rets+s1+','; end; //以上取完了所有键名for i:=0 to l do begin s:=sarr[i];k:=0; s1:='';s2:=''; m:=length(s); for j:=0 to m do begin if s[j]=#9 then inc(k) else begin if k=2 then s1:=s1+s[j]; if k=11 then s2:=s2+s[j]; end; end; c:=upcase(s1[1]); if i=l then begin if (c='D') and (s2='') then rets:=rets+' null) ' else //日期为空时 if (c='F') or (c='I') then rets:=rets+s2+') ' else //数值类型 rets:=rets+#39+s2+#39+') '; //#39是MSSQL字串分隔符 end else begin if (c='D') and (s2='') then rets:=rets+' null,' else if (c='F') or (c='I') then rets:=rets+s2+',' else rets:=rets+#39+s2+#39+','; end; end;if debug then tell('insert into '+tablename+' '+rets);pu_exec('insert into '+tablename+' '+rets);end;