我以前请教了你一个问题,当时我按你的方法解决了问题,可现在我测试的时候又出现了新的问题?
http://topic.csdn.net/u/20090212/09/4859ebb2-4930-43c5-b876-048901d14919.html现在数据都写到了缓存里,我数据库中的‘工号’是主键,比如说我上一次输入一个数据库中已存在的工号名,,提示错误,然后我换成一个不存在的工号名,还是提示‘不能插入重复的值’

解决方案 »

  1.   


    unit addfor;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, ADODB, Mask, Grids, DBGrids,
      jpeg, ComCtrls, bsSkinCtrls, bsSkinBoxCtrls, bsdbctrls, bsSkinData;type
      Taddform = class(TForm)
        Image1: TImage;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label5: TLabel;
        Label4: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Label11: TLabel;
        DBEdit1: TDBEdit;
        DBEdit5: TDBEdit;
        DBEdit6: TDBEdit;
        DBEdit8: TDBEdit;
        DBRadioGroup1: TDBRadioGroup;
        DBMemo1: TDBMemo;
        ADOQuery1: TADOQuery;
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
        Label16: TLabel;
        Label17: TLabel;
        DBEdit10: TDBEdit;
        DBEdit11: TDBEdit;
        DBEdit12: TDBEdit;
        DBEdit13: TDBEdit;
        DateTimePicker1: TDateTimePicker;
        DateTimePicker2: TDateTimePicker;
        bsSkinDBComboBox1: TbsSkinDBComboBox;
        bsSkinData1: TbsSkinData;
        bsCompressedStoredSkin1: TbsCompressedStoredSkin;
        bsSkinButton1: TbsSkinButton;
        bsSkinButton2: TbsSkinButton;    bsSkinButton4: TbsSkinButton;
        bsSkinDBComboBox2: TbsSkinDBComboBox;
        bsSkinDBComboBox3: TbsSkinDBComboBox;
        bsSkinDBComboBox4: TbsSkinDBComboBox;
        procedure Button3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure bsSkinButton1Click(Sender: TObject);
        procedure bsSkinButton2Click(Sender: TObject);
        procedure bsSkinButton4Click(Sender: TObject);    procedure DBEdit12Exit(Sender: TObject);
        
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      addform: Taddform;implementation{$R *.dfm}procedure Taddform.bsSkinButton1Click(Sender: TObject);
    begin
    dbedit1.Visible:=true;
    dbedit8.Visible:=true;
    dbradiogroup1.Visible:=true;
    bsSkinDBComboBox1.Visible:=true;
    bsSkinDBComboBox4.Visible:=true;
    dbedit5.Visible:=true;
    dbedit6.Visible:=true;
    bsSkinDBComboBox2.Visible:=true;
    bsSkinDBComboBox3.Visible:=true;
    dbedit10.Visible:=true;
    dbedit11.Visible:=true;
    dbedit12.Visible:=true;
    dbedit13.Visible:=true;
    dbmemo1.Visible:=true;
    bsSkinButton2.Visible:=true;
    DateTimePicker1.Visible:=true;
    DateTimePicker2.Visible:=true;
    adoquery1.Insert;
    dbedit1.SetFocus;
    bsSkinButton2.Visible:=true;
    end;procedure Taddform.bsSkinButton2Click(Sender: TObject);
    begin
    try
      if AdoQuery1.state in [dsinsert,dsEdit] then
    beginadoquery1.FieldByName('生日').AsDateTime:= DateTimePicker2.Date;
    adoquery1.FieldByName('入职时间').AsDateTime:= DateTimePicker1.Date;adoquery1.post;
    bsSkinButton1.Visible:=false;
    end;
    ADOQuery1.UpdateBatch();
    except
      raise;end;end;procedure Taddform.bsSkinButton4Click(Sender: TObject);
    begin
    bsSkinButton2.Visible:=false;addform.dbedit1.Visible:=false;
    addform.dbedit8.Visible:=false;
    addform.dbradiogroup1.Visible:=false;
    addform.bsSkinDBComboBox1.Visible:=false;
    addform.bsSkinDBComboBox4.Visible:=false;
    addform.dbedit5.Visible:=false;
    addform.dbedit6.Visible:=false;
    addform.bsSkinDBComboBox2.Visible:=false;
    addform.bsSkinDBComboBox3.Visible:=false;
    addform.dbedit10.Visible:=false;
    addform.dbedit11.Visible:=false;
    addform.dbedit12.Visible:=false;
    addform.dbedit13.Visible:=false;
    addform.dbmemo1.Visible:=false;
    addform.DateTimePicker1.Visible:=false;
    addform.DateTimePicker2.Visible:=false;
    close;
    end;procedure Taddform.Button3Click(Sender: TObject);
    begin
    adoquery1.Close;
    adoquery1.SQL.clear;
    adoquery1.SQL.Add('select * from 工资管理 where  工号='''+dbedit1.Text+'''');
    adoquery1.open;
    end;
    procedure Taddform.FormCreate(Sender: TObject);var
      loginstr:string;
    beginloginstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath(ParamStr(0)) +'人事管理系统.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";';
    ADOConnection1.Connected:=false;
    ADOConnection1.ConnectionString:=loginstr;
    ADOConnection1.Connected:=true;
    ADOQuery1.Active:=true;
    end;
    procedure Taddform.DBEdit12Exit(Sender: TObject);
    begin
    if   (TWinControl(Screen.ActiveControl).Name <> 'bsSkinButton4' )  then
    begin
    if (length(Trim(dbedit12.text)) <> 15) and (length(Trim(dbedit12.text)) <> 18 )  then
        begin
        messagebox(self.Handle,'身份证号非法输入','信息',mb_iconwarning);
        dbedit12.SetFocus;
        dbedit12.Text:='';
        end;
    end;
    end;end.
      

  2.   

    button1是‘申请登记’,button2是‘保存信息’button4是退出,button3没用
      

  3.   

    当前 : 在post之前,先用别的adoquery判断一下这个ID有没有被使用,如果没有再post最好 :ID既然是主键,就不要这样干了,不然数据行少还可以蒙,多了,输个ID都累死了,每次不行都再试...
      

  4.   


    procedure Taddform.bsSkinButton2Click(Sender: TObject);
    var
      qry : TADOquery;
    begin
      qry := TadoQuery.create(nil);
      try
        qry.connection := AdoQuery1.Connection;
        qry.sql.text := 'select 1 from  表名  where 工号’ ='+QuotedStr( 當前工號的EDIT裏的值)
        qry.open;
        if not Qry.IsEmpty then begin
          showMessage('Fount ID');
          abort;
        end;
      finally
        FreeAndNil(Qry);
      end;
      try
        if AdoQuery1.state in [dsinsert,dsEdit] then
        begin
          adoquery1.FieldByName('生日').AsDateTime:= DateTimePicker2.Date;
          adoquery1.FieldByName('入职时间').AsDateTime:= DateTimePicker1.Date;
          adoquery1.post;
          bsSkinButton1.Visible:=false;
        end;
        ADOQuery1.UpdateBatch();
      except
        raise;
      end;
    end;這裏是沒有問題的。
      

  5.   

    我按你的试了试   现在的问题是插入一条已存在的工号,能提示'Fount ID',可插入一条不存在的工号,它竟提示“索引重复”,并报错终止。
      

  6.   

     現在這個表是不是什麼數據都插入不了?? 我不太清楚,你在查詢分析器下會不會這樣?? 你的數據庫是哪一個版本?
     嘗試檢查下表吧!  dbcc checktable
      

  7.   

    procedure Taddform.bsSkinButton2Click(Sender: TObject);
    var
      qry : TADOquery;
    begin
      qry := TadoQuery.create(nil);
      try
        qry.connection := AdoQuery1.Connection;
        qry.sql.text := 'select 1 from  表名  where 工号’ ='+QuotedStr( 當前工號的EDIT裏的值)
        qry.open;
        if not Qry.IsEmpty then begin
          showMessage('Fount ID');
          AdoQuery1.cancel;
          exit;
        end;
      finally
        FreeAndNil(Qry);
      end;  try
        if AdoQuery1.state in [dsinsert,dsEdit] then
        begin
          adoquery1.FieldByName('生日').AsDateTime:= DateTimePicker2.Date;
          adoquery1.FieldByName('入职时间').AsDateTime:= DateTimePicker1.Date;
          adoquery1.post;
          bsSkinButton1.Visible:=false;
        end;
        ADOQuery1.UpdateBatch();
      except
        raise;
      end;
    end;
    try it