2017-01-27 19 views
0

Delphi 7で作成しようとしているコードは次のとおりです。しかし、1回の操作で複数のMySQLコマンドを実行することはできませんでした。 したいです。mysqlで複数のSQLコマンドを実行する

A- customer table >>> address_id, customer_id, firstname, lastname, 
B- address table >>> address_id, customer_id, firstname, lastname 
C- customer table >>> address_id, 

B = A and C = B 

私は、の形式でコードする必要があります。 mysqlにはどのようにコードが必要ですか?

modul.Q_Customer.Close; 
modul.Q_Customer.SQL.Clear; 
modul.Q_Customer.SQL.Add('INSERT INTO customer (customer_group_id,firstname, lastname, email, approved, ip, model, telephone, fax, status, date_added)'); 
modul.Q_Customer.SQL.Add('Values(:CG, :ADI, :SOYADI, :MAIL, "1", "127.0.0.1", "ISYERI", :TELEFON, :FAX, "1", NOW()); '); 

modul.Q_Customer.SQL.Add('INSERT INTO address (customer_id, firstname,lastname,company,VergiDaire, address_1, address_2, city, postcode, country_id, zone_id, VergiNo)'); 
modul.Q_Customer.SQL.Add('Values(LAST_INSERT_ID(), :ADI, :SOYADI, :FIRMA, :VD, :ADRES1, :ADRES2, :SEMT, :POSTAKOD, "215", :IL, :VN; '); 

modul.Q_Customer.SQL.Add('UPDATE customer SET address_id = LAST_INSERT_ID() WHERE customer_id = LAST_INSERT_ID();'); 

modul.Q_Customer.ParamByName('CG').Value:=CG; 
modul.Q_Customer.ParamByName('ADI').Value:=ADI; 
modul.Q_Customer.ParamByName('SOYADI').Value:=SOYADI; 
modul.Q_Customer.ParamByName('MAIL').Value:=MAIL; 
modul.Q_Customer.ParamByName('TELEFON').Value:=TELEFON; 
modul.Q_Customer.ParamByName('FAX').Value:=FAX; 
modul.Q_Customer.ParamByName('FIRMA').Value:=UNVAN; 
modul.Q_Customer.ParamByName('ADRES1').Value:=ADRES1; 
modul.Q_Customer.ParamByName('ADRES2').Value:=ADRES2; 
modul.Q_Customer.ParamByName('SEMT').Value:=SEMT; 
modul.Q_Customer.ParamByName('POSTAKOD').Value:=POSTAKOD; 
modul.Q_Customer.ParamByName('IL').Value:=IL; 
modul.Q_Customer.ParamByName('VD').Value:=VergiD; 
modul.Q_Customer.ParamByName('VN').Value:=VergiN; 
modul.Q_Customer.ExecSQL; 
+0

どのように動作しませんでしたか?間違いましたか? –

+0

'' UPDATE customer SET address_id = LAST_INSERT_ID()WHERE customer_id = LAST_INSERT_ID(); ''が正しく表示されません。 –

+0

**エラー:** SQLエラー:SQL構文にエラーがあります。 INSERT INTOアドレス(customer_id、firstname、lastname、company、VergiDair '、1行目)の近くで使用する正しい構文については、MySQLサーバのバージョンに対応するマニュアルを参照してください。 –

答えて

0

私はあなたのライン

modul.Q_Customer.SQL.Add('Values(LAST_INSERT_ID(), :ADI, :SOYADI, :FIRMA, :VD, :ADRES1, :ADRES2, :SEMT, :POSTAKOD, "215", :IL, :VN; '); 

VN; 

後に閉じ括弧が欠落していると思いますところで、それはツールlkieのMySQL Workbenchを使用して、このような問題を試してみて、識別するために常に最善です。

0

あなたはZEOSコンポーネントを使用している場合、あなたはでそれを行うことができます:あなたはそれを行うことができます手順で

function DoMySQLScript(Script: string; Args: array of const; 
    Delimiter: string): boolean; 
var ZSqlProcessor: TZSQLProcessor; 
begin 
    Result := False; 
    Script := FormatQuery(Script, Args); // Format the Script with Args 
    ZSqlProcessor:= TZSQLProcessor.Create(nil); 
    try 
     ZSqlProcessor.Delimiter := Delimiter; 
     ZSqlProcessor.Script.Text := Script; 
     ZSqlProcessor.Connection:= MyConnection; // the connection to you DB 
     try 
     ZSqlProcessor.Execute; 
     Result := True; 
     except 
     Result := False; 
     end; 
    finally 
    ZSqlProcessor.free; 
    end; 
end; 

begin 
    S:= 'INSERT INTO customer (customer_group_id,firstname, lastname, email, approved, ip, model, telephone, fax, status, date_added)' 
    'Values(%s, %s, %s, %s, "1", "127.0.0.1", "ISYERI", %s, %s, "1", NOW());' 
    +' INSERT INTO address (customer_id, firstname,lastname,company,VergiDaire, address_1, address_2, city, postcode, country_id, zone_id, 
    +' VergiNo) Values(LAST_INSERT_ID(), %s, %s, %s, %s, %s, %s, %s, %s, "215", %s, %s;' 
    +'UPDATE customer SET address_id = LAST_INSERT_ID() WHERE customer_id = LAST_INSERT_ID(); 

    DoMySQLScript(S, [CG,ADI,SOYADI,MAIL,TELEFON,FAX,UNVAN,ADRES1,ADRES2,SEMT,POSTAKOD,IL,VergiD,VergiN], ';'); 
end; 

NB:あなたがZSqlProcessorを見つけることができますZSqlProcessor.pas

+0

トランザクションを使うべきだと思います。多くのパラメータがあるので、すべてを1つのストアドプロシージャでラップすることをお勧めします。 – user763539

関連する問題