问题 1、首先这个问题要分成是插入还是更新,如果是更新的话,这个表中要有一个唯一标识字段,比如ID,按照你这个说法是要插入,那就有两种插入的方法了,第一个就是不先连接表,直接插入,推荐这个办法 例: try ADOQuery.Close; ADOQuery.SQL.Clear; ADOQuery.SQL.Add('insert into OK(INDT,INNUM)values(INDT,:INNUM)'); ADOQuery.Parameters.ParamByName('INDT').Value := DateTimePicker1.DateTime; ADOQuery.Parameters.ParamByName('INNUM').Value := Edit1.Text; ADOQuery.ExecSQL; except ShowMessage('插入记录失败'); end; 第二个就是连接表,然后插入记录,因为这个办法多了一步连接表的过程,耗费资源,不推荐 例: 连接表的代码略: ………… ADOQuery.Append; ADOQuery.FieldByName('INDT').AsDateTime := DateTimePicker1.DateTime; ADOQuery.FieldByName('INNUM').AsString := Edit1.Text; ADOQuery.Post;问题2;建议增加一个字段做唯一标识,比如自动增长的ID,在读出值的时候也读出当前ID值,更新写入的时候更新这个ID的值就行了,当然如果你读取当前记录的之后,就不在变化Adoquery的游标了,那么就可以直接写进去值 ADOQuery.Edit; ADOQuery.FieldByName('INDT').AsDateTime := DateTimePicker1.DateTime; ADOQuery.FieldByName('INNUM').AsString := Edit1.Text; ADOQuery.Post;问题3。这个问题没看出来有什么意义, ADOQuery := TADOQuery.Create(Self); ADOQuery.Connection := ADOConnection1;//指定数据库连接组件 ADOQuery.SQL.Clear; ADOQuery.SQL.Add('select * from OK'); ADOQuery.Open; ADOQuery.Append; ADOQuery.FieldByName('INDT').AsDateTime := DateTimePicker1.DateTime; ADOQuery.FieldByName('INNUM').AsString := Edit1.Text; ADOQuery.Post; ADOQuery.Last; //刚才插入的那条记录就是最后一条, //由于已经定位到最后一条了,这个时候就可以读取刚才插入的值了 ADOQuery.Free; 问题4;使用TDBCheckBox控件,可以直接显示是或者否