写数据到数据库常用的方法有两种:
1、在客户端程序用CommandText给服务器程序指令
2、以传递参数的方式
可我需要将很多的值写入数据库的不同表中(不是一次写入),例如:我需要将用户输入的姓名和地址写入Users表,然后又要将用户输入的工作单位写入Work表,......。
请问如何编写程序?如果以第2种方法,对于每一个表都得建一个DataSetProvider和ADOQuery,感觉很杂乱。但如果以第1种方法,如何将用户输入的数据以变量形式带入SQL语句?(例如:username为输入的变量,请问如何用SQL语句表示将username插入表Users?)
是否有第3种方法更简单、方便呢?
请大家帮忙解答!多提宝贵意见!

解决方案 »

  1.   

    设你用的是ADOQUERY
    with adoquery do
    begin
     close;
     sql.clear;
     sql.add('insert into user (username_column) values(:username)')'
     Parameters[0].value:='sdf';
     execsql;
    end;
      

  2.   

    这就是第2种方法呀!
    如果用这种方法,就要为传递给每一个表的参数设定一个ADOQuery,当表多的时候就显得很杂乱。
    最好是能用第一种方法,但关键是如何将用户输入的数据以变量的形式带入SQL语句?
    不知道我的意见是否正确,请多多指正。
      

  3.   

    "当表多的时候就显得很杂乱", 杂乱但是有必要的, 你要使用第一种方法, 当多用户同时访问时怎么办? 有很多细节处理是需要DataSetProvider的.
      

  4.   

    没有必要一个表对应一个adoquery  吧
    你可以在程序中动态的赋值 啊,我现在都一般只用一 个对应多张表
      

  5.   

    你使用的什么数据库?可以用存储过程。以SQL Server 为例,可以在SQL Server中建立如下存储过程:
    create proc My_proc
           @username char(10),
           @Address  varchar(50),
           @Office   varChar(50)
    as
          insert into TabUser(UserName,UserAddress)values(@userName,@Address)
          insert into TabWork(OfficeName)values(@office)
    go然后通过一个ADOQuery调用存储过程。
    Query1.Close;
    Query1.Sql.Clear;
    Query1.SQL.add(Execute my_proc :userName,:Address,:Office);
    Query1.ParamaByName('UserName').Value:=?
    ......
    Query1.Execute;
      

  6.   

    建几个String的变量,组装多个sql语句,然后在一个事务里一起执行:)