我有一条长的sql语句,想把它插入到access数据库中,代码如下:
var s1:string;
s1:='SELECT  *, (discountamount - CONVERT(int, payed_account)) AS left_money
FROM   (SELECT  ordergroup.groupno,customer.balancename,customer.contact1,              
customer.customerid,customer.code, ordergroup.groupid, customer.companyname,                             
customer.tel1,customer.address,customer.fax1,invoice.invoicecode, order_account.order_price, invoice.discountamount, invoice.invoicedate,               payed_account = (CASE WHEN payed_invoice.payed_account IS NULL THEN 0 ELSE        payed_invoice.payed_account END)                                                        FROM       ordergroup      LEFT JOIN                                                      
 (SELECT         SUM(price) AS order_price, groupid
                                                            FROM              orderform
                                                            WHERE          deleteflag = 0 AND price IS NOT NULL
                                                            GROUP BY   groupid) AS order_account ON 
                                                      order_account.groupid = ordergroup.groupid LEFT JOIN
                                                      customer ON ordergroup.customerid = customer.customerid, 
                                                      invoice LEFT JOIN                                                       (SELECT         SUM(paymentamount) AS   payed_account,  invoiceid                                                             FROM              payment
                                                            WHERE          paymentamount IS NOT NULL
                                                            GROUP BY   invoiceid) AS payed_invoice ON 
                                                           invoice.invoiceid = payed_invoice.invoiceid
                           WHERE          ordergroup.groupid = invoice.groupid AND 
                                                      invoice.deleteflag = 0 AND ordergroup.deleteflag = 0) AS a
                           WHERE                                discountamount - payed_account > 0
';
reportqry.Close;
reportqry.SQL.Clear;
reportqry.SQL.Add('insert into report (mainsql,detailsql) values (''s1'')');      
reportqry.Prepared;
reportqry.ExecSQL;
现在关键是s1那里报错,请问高手们象这种长的sql语句在delphi里面应该怎样写才符合规范啊!!!

解决方案 »

  1.   

    不对,写错了一点点啊
    reportqry.SQL.Add('insert into report (mainsql) values (''s1'')');
      

  2.   

    先让sl在查询分析器里执行,如果正确则sl没问题,下面的改为如下:
    reportqry.Close;
    reportqry.SQL.Clear;
    reportqry.SQL.Add('insert into report (mainsql,detailsql) values ('''+s1+''')');      
    reportqry.Prepared;
    reportqry.ExecSQL;
      

  3.   

    不是啊高手我的S1是没有问题的啊
    关键是这么长的SQL语句在DELPHI当中怎样写啊
      

  4.   

    你的思路是对的,你可以把'insert into report (mainsql,detailsql) values 这句话也放在s1里,然后将生成的s1输出看能不能在数据库运行
      

  5.   

    我是这条长的SQL语句在DELPHI里面该如何写啊这条语句本身没有问题,关键是在DELPHI当中的写法规范的问题啊
      

  6.   

    所谓的“规范”一般是指的易读性吧,但是程序识别SQL代码好象这一点不重要。只要文法正确就可以的。你最后那句中的括号好象是不需要的。
    通式:
    INSERT INTO DEST_TABLE(FIELD1, ...FIELDSN) VALUES SELECT * FROM SOURCETABLE WHERE CONDITIONS;
    INSERT INTO DEST_TABLE(FIELD1, ...FIELDSN) VALUES (VALUE1, ...VALUESN);
    “VALUES”后面如果跟“SELECT”是不需要括号的。
      

  7.   

    s1:=''中,不能把所有的字符都弄在一个单引号中,一个单引号中好象只能放256个字符,所以要通过加号(+)和多个单引号把字符串拆开,如:s1:=''SELECT  *, (discountamount - CONVERT(int, payed_account)) AS left_money'+'From、、、'