procedure TfrmInputManage.BtMonthClick(Sender: TObject);
var
tablename,y,m,sqlstr:string;
SL: TStrings;
index,flag: Integer;
begin
flag:=0;
SL := TStringList.Create;
y:=formatdatetime('yyyy',now);
if (strtoint(formatdatetime('mm',now))-1)<10 then
m:='0'+inttostr(strtoint(formatdatetime('mm',now)))
else
m:=inttostr(strtoint(formatdatetime('mm',now)));
tablename:=y+m;
try
DMtongtao.ADOCtongtao.GetTableNames(SL, False);
for index := 0 to (SL.Count - 1) do begin
if tablename=SL[index] then
flag:=1
end;
finally
SL.Free;
end; if flag=1 then
showmessage('该月的入库汇总表已存在!'); DMtongtao.ADOQrkdj.Close;
DMtongtao.ADOQrkdj.SQL.Add('select * from rkdjb where SUBSTRING(rkdh,5,2)='''+m+'''');
DMtongtao.ADOQrkdj.Open; if DMtongtao.ADOQrkdj.IsEmpty then
begin
DMtongtao.ADOQrkdj.Close;
showmessage('该月不存在入库信息!');
end
else
begin
sqlstr:='select P_code as 产品编号,P_name as 产品名,sum(P_sl) as 总数量,sum(P_sl*P_price) as 总金额 into '+tablename+' from rkdjb group by P_code,p_name order by P_code,P_name';
ADOQCreate.Close;
ADOQCreate.SQL.Add(sqlstr);
ADOQCreate.ExecSQL;
end;
ADOTable1.TableName:=tablename;
ADOTable1.Active:=true;
end;
总说第一行200405附近有错误,我是看不出来了
sql语句应该没问题,我在sql server里通过了的
var
tablename,y,m,sqlstr:string;
SL: TStrings;
index,flag: Integer;
begin
flag:=0;
SL := TStringList.Create;
y:=formatdatetime('yyyy',now);
if (strtoint(formatdatetime('mm',now))-1)<10 then
m:='0'+inttostr(strtoint(formatdatetime('mm',now)))
else
m:=inttostr(strtoint(formatdatetime('mm',now)));
tablename:=y+m;
try
DMtongtao.ADOCtongtao.GetTableNames(SL, False);
for index := 0 to (SL.Count - 1) do begin
if tablename=SL[index] then
flag:=1
end;
finally
SL.Free;
end; if flag=1 then
showmessage('该月的入库汇总表已存在!'); DMtongtao.ADOQrkdj.Close;
DMtongtao.ADOQrkdj.SQL.Add('select * from rkdjb where SUBSTRING(rkdh,5,2)='''+m+'''');
DMtongtao.ADOQrkdj.Open; if DMtongtao.ADOQrkdj.IsEmpty then
begin
DMtongtao.ADOQrkdj.Close;
showmessage('该月不存在入库信息!');
end
else
begin
sqlstr:='select P_code as 产品编号,P_name as 产品名,sum(P_sl) as 总数量,sum(P_sl*P_price) as 总金额 into '+tablename+' from rkdjb group by P_code,p_name order by P_code,P_name';
ADOQCreate.Close;
ADOQCreate.SQL.Add(sqlstr);
ADOQCreate.ExecSQL;
end;
ADOTable1.TableName:=tablename;
ADOTable1.Active:=true;
end;
总说第一行200405附近有错误,我是看不出来了
sql语句应该没问题,我在sql server里通过了的
tablename,y,m,sqlstr:string;
SL: TStrings; <====SL :TStringList;
----------------------------------------
问题再这里
你判断表名是否存在也太长了:
if SL.IndexOf(tblname) >= 0 then
begin
showmessage('该月的入库汇总表已存在!');
Exit;
end;
...
ADOQCreate.Close;
ADOQCreate.SQL.Clear; {加此句试试}
ADOQCreate.SQL.Add(sqlstr);
...
这个SQL语句我怎么看都看不懂,不正确,你想把这些内容加入到更一个表中吧,要是这样却没有insert,你看哪个变量的值是200405,那么错误就在那个附近
应该是上一句sql语句没有清空,清空试试。
SELECT ... INTO TABLENAME 是把查询得到的数据导入新表的语句,上面的SQL没有错啊.