如何将表中的值保存到另一个表中

时间:2019-02-12 19:27:32

标签: sql delphi

我正在使用delphi rad studio,并且我是一个初学者。我正在尝试将值从另一个仅包含ID的表插入表中。我有一些组合表中充满了表中的ID,然后我想将这些值插入到另一个表中。更具体地说,我有一个表,该表包含有关汽车的规格,我想将其保存到包含该车租赁信息的表中。我已经尝试了很多,但是没有得到答案。这是combobox的代码:

    procedure TForm13.DBLookupComboBox1Click(Sender: TObject);
    begin
    adomarca.SQL.Text :=    ' SELECT tabel_Marca.Marca from Tabel_Masini ' +
     'join tabel_Marca on tabel_masini.id_Marca=tabel_marca.id_Marca ' ;

     SELF.ADOmarca.ExecSQL;
     SELF.ADOmarca.Open;
     ADOmarca.Prepared := TRUE;
     end;        

这是保存按钮的代码:

     procedure TForm13.button2click(Sender: TObject);

      begin
      Comanda := 'Insert into Tabel_Inchirieri (id_Client, id_Marca, 
                id_Model, id_Transmisie, id_Caroserie, id_Culoare, 
                   id_Combustibil, Ziua_Inchirierii, Ziua_Restituirii, 
            Nr_zile_inchiriate) ' +
        // 'select * from tabel_masini ' +
         'Values (' + inttostr(DBLOOKUPCOMBOBOX8.keyvalue) + ',' 
         +inttostr(DBLOOKUPCOMBOBOX1.keyvalue) + ',' + 
          inttostr(DBLOOKUPCOMBOBOX2.keyvalue) + ',' + 
          inttostr(DBLOOKUPCOMBOBOX3.keyvalue) + ',' + 
          inttostr(DBLOOKUPCOMBOBOX4.keyvalue)+ ',' + 
           inttostr(DBLOOKUPCOMBOBOX5.keyvalue) + ',' + 
          inttostr(DBLOOKUPCOMBOBOX6.keyvalue)+ ',' + 
           quotedstr(formatdatetime('yyyy-mm-dd',DateTimePicker1.Date))+ 
          ','+ quotedstr(formatdatetime('yyyy-mm- 
           dd',DateTimePicker2.Date))+',' + 
          inttostr(daysbetween(DateTimePicker2.Date, 
        DateTimePicker1.Date))+')';
         Qcomanda.SQL.Add(Comanda);

         try
           Qcomanda.ExecSQL ;
         finally
            ShowMessage('Comanda a fost salvata cu succes ! ');

          end;


           end;

非常感谢您。

1 个答案:

答案 0 :(得分:3)

您没有说您正在使用什么RDMS,但是有一些方法可以完全在SQL中完成 至少应与MS Sql Server和MS Access一起使用,这可能是 ADO中最常用的RDMS。

如果您打算进行复制操作以在服务器上填充新表 您可以像这样使用SQL

   SELECT
     [FieldList]
   INTO
     MyNewTable
   FROM
     [tables and join condition]

您可以轻松地在Google上找到此示例,请参阅f.i。 http://www.vb-helper.com/howto_ado_select_into.html

如果要将行复制到现有表中,可以使用

   INSERT INTO
     [tablename]
   SELECT
     [fieldlist]
   FROM
     [tables and join condition]

请参阅f.i. https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/insert-into-statement-microsoft-access-sql

您可以在Delphi应用程序中执行这些SQL语句,如果使用MS SQL Server,也可以执行这些SQL语句, 使用SQL Server Management Studio。

与建议的代码不同,这两种方法都可以一次性复制选定的记录,而无需逐记录,逐列的复制操作,与这两种方法相比,您应该发现这两种方法都非常快客户端逐记录复制。但是,如果涉及大量的记录,则需要小心:一次性完成所有记录意味着它们可能被包装在巨大的服务器端事务中,这可能会耗尽服务器的资源,因此在这种情况下,如果可行,最好将复制品分成一系列较小的批次。

相关问题