我想要一个关于用ADO访问SQL的事例,用DELPHI编的
谢谢

解决方案 »

  1.   

    reseach demo from delphi
      

  2.   

    什么叫“做某些编程的时候是可能会产生冲突的",百思不得其解。
    DELPHI安装目录下面有DEMO目录,里面有你要的,怎么会找不到?
      

  3.   

    什么叫“做某些编程的时候是可能会产生冲突的",百思不得其解,指点。
    DELPHI安装目录下面有DEMO目录,里面有你要的,怎么会找不到?
      

  4.   

    我刚学DELPHI 2 天,所以尽请谅解!!
      

  5.   

    刚学了2天?还是当你对DELPHI 有一个大概的认识了以后再问一些问题吧
      

  6.   

    //这是我写的一个问题查询系统的一部分,
    //主要涉及用ADO动态创建数据库和访问数据库
    //在数据模块DM上扔个TADOQuery控件ADOQ_Any上去
    unit UnitMain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, ExtCtrls, StdCtrls, DB, DBTables, DBCtrls, Mask, Danhint,
      ComObj, ADODB,Buttons, DynamicSkinForm, SkinData, SkinCtrls;type
      TfrmMain = class(TForm)
        Panel1: TPanel;
        Panel2: TPanel;
        StatusBar1: TStatusBar;
        Panel3: TPanel;
        edtSearch: TEdit;
        GroupBox1: TGroupBox;
        rKey: TRadioButton;
        rAll: TRadioButton;
        PB: TProgressBar;
        Panel4: TPanel;
        ScrollBox1: TScrollBox;
        dsView: TDataSource;
        Label1: TLabel;
        DBEdit1: TDBEdit;
        Label2: TLabel;
        DBEdit2: TDBEdit;
        Label3: TLabel;
        DBEdit3: TDBEdit;
        Label4: TLabel;
        DBEdit4: TDBEdit;
        Label5: TLabel;
        DBEdit5: TDBEdit;
        Label6: TLabel;
        DBMemo1: TDBMemo;
        Label7: TLabel;
        Label8: TLabel;
        DBEdit6: TDBEdit;
        Label9: TLabel;
        DBEdit7: TDBEdit;
        GroupBox2: TGroupBox;
        cbxSort: TComboBox;
        chkSort: TCheckBox;
        LV: TListView;
        Splitter1: TSplitter;
        DanHint1: TDanHint;
        DBMemo2: TDBMemo;
        spSkinData1: TspSkinData;
        spDynamicSkinForm1: TspDynamicSkinForm;
        btnSearch: TspSkinButton;
        btnInsert: TspSkinButton;
        btnPrint: TspSkinButton;
        btnPw: TspSkinButton;
        btnHelp: TspSkinButton;
        btnAbout: TspSkinButton;
        btnExit: TspSkinButton;
        procedure FormShow(Sender: TObject);
        procedure Splitter1CanResize(Sender: TObject; var NewSize: Integer;
          var Accept: Boolean);
        procedure ScrollBox1CanResize(Sender: TObject; var NewWidth,
          NewHeight: Integer; var Resize: Boolean);
        procedure btnExitClick(Sender: TObject);
        procedure btnSearchClick(Sender: TObject);
        procedure chkSortClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure LVSelectItem(Sender: TObject; Item: TListItem;
          Selected: Boolean);
        procedure btnInsertClick(Sender: TObject);
        procedure btnPrintClick(Sender: TObject);
        procedure btnAboutClick(Sender: TObject);
        procedure btnHelpClick(Sender: TObject);
        procedure btnPwClick(Sender: TObject);
      private
          function CreateMDB:boolean;    { Private declarations }
      public
        { Public declarations }
      end;
    const
    //字典表 计费
    c_data='CREATE TABLE [data]('
        +'[Id] autoincrement,'
        +'[Bh] varchar(10),'//编号
        +'[Sorts] varchar(20),'//
        +'[Q_Date] DateTime,'//
        +'[Q_Name] varchar(20),'//
        +'[Keys] varchar(50),'//
        +'[Question] varchar(240),'//
        +'[Answer] memo,'//
        +'[A_Date] DateTime,'//
        +'[A_Name] varchar(20))';c_passwd='CREATE TABLE [passwd]('
        +'[Id] varchar(10),'
        +'[Pw] varchar(20))';//
    var
      frmMain: TfrmMain;
      mdbFileName:string;implementationuses UnitDm, UnitEdit, UnitPrint, UnitAbout, UnitHelp, UnitInputPw,
      UnitChangPw;{$R *.dfm}procedure TfrmMain.FormShow(Sender: TObject);
    var
        i:integer;
    begin
        DM.ADOQ_Any.Close;
        DM.ADOQ_Any.SQL.Clear;
        DM.ADOQ_Any.SQL.Add('select distinct sorts from data');
        DM.ADOQ_Any.Open;
        if DM.ADOQ_Any.RecordCount>0 then
        begin
            for i:=1 to DM.ADOQ_Any.RecordCount do
            begin
                cbxSort.Items.Add(DM.ADOQ_Any.Fields.Fields[0].AsString);
                DM.ADOQ_Any.Next;
            end;
            cbxSort.ItemIndex:=0;
        end;DM.at_Data.Open;
    DM.at_Data.Filter:='id=1';DM.ADOQ_Any.Close;
    DM.ADOQ_Any.SQL.Text:='select pw from passwd where id='+QuotedStr('User');
    DM.ADOQ_Any.Open;
    if DM.ADOQ_Any.RecordCount>0 then
    begin
        if (DM.ADOQ_Any.Fields.Fields[0].AsDateTime>now+1)
            or(DM.ADOQ_Any.Fields.Fields[0].AsDateTime<now-31)
        then begin
            Application.MessageBox('程序发生异常错误,请与我联系:[email protected]','提示',MB_OK+MB_ICONWARNING);
            Application.Terminate;
        end;
    end else
    begin
        Application.MessageBox('程序发生异常错误,请与我联系:[email protected]','提示',MB_OK+MB_ICONWARNING);
        Application.Terminate;
    end;try
        frmInputPw:=TfrmInputPw.Create(nil);
        frmInputPw.ShowModal;
        frmInputPw.Free;
    except
        frmInputPw.Free;
    end;end;procedure TfrmMain.Splitter1CanResize(Sender: TObject;
      var NewSize: Integer; var Accept: Boolean);
    begin
    if NewSize<50 then Accept:=false;
    end;procedure TfrmMain.ScrollBox1CanResize(Sender: TObject; var NewWidth,
      NewHeight: Integer; var Resize: Boolean);
    begin
    if NewHeight<20 then Resize:=false;
    end;procedure TfrmMain.btnExitClick(Sender: TObject);
    begin
    Close;
    end;procedure TfrmMain.btnSearchClick(Sender: TObject);
    var
        i:integer;
        li:TListItem;
    begin
    LV.Items.Clear;if not DM.at_Data.Active then
        DM.at_Data.Open;    DM.ADOQ_Any.Close;
        DM.ADOQ_Any.SQL.Clear;if rKey.Checked then
    begin
        DM.ADOQ_Any.SQL.Add('select id,question from data where keys like :key ');
        DM.ADOQ_Any.Parameters.ParamByName('key').DataType:=ftString;
        DM.ADOQ_Any.Parameters.ParamValues['key']:='%'+edtSearch.Text+'%';
        if chkSort.Checked and (cbxSort.Text<>'') then
        begin
          DM.ADOQ_Any.SQL.Add('and sorts like :sort');
          DM.ADOQ_Any.Parameters.ParamByName('sort').DataType:=ftString;
          DM.ADOQ_Any.Parameters.ParamValues['sort']:='%'+cbxSort.Text+'%';
        end;
    end;
      

  7.   


    if rAll.Checked then
    begin
        DM.ADOQ_Any.SQL.Add('select id,question from data where question like :key ');
        DM.ADOQ_Any.Parameters.ParamByName('key').DataType:=ftString;
        DM.ADOQ_Any.Parameters.ParamValues['key']:='%'+edtSearch.Text+'%';
        if chkSort.Checked and (cbxSort.Text<>'') then
        begin
          DM.ADOQ_Any.SQL.Add('and sorts like :sort');
          DM.ADOQ_Any.Parameters.ParamByName('sort').DataType:=ftString;
          DM.ADOQ_Any.Parameters.ParamValues['sort']:='%'+cbxSort.Text+'%';
        end;
    end;    DM.ADOQ_Any.Open;
        if DM.ADOQ_Any.RecordCount=0 then
            Application.MessageBox('对不起,没有找到该问题。','提示')
        else begin
            Lv.Items.Clear;        for i:=1 to DM.ADOQ_Any.RecordCount do
            begin
                li:=Lv.Items.Insert(i);
                li.Caption:=IntToStr(i);
                li.SubItems.Add(DM.ADOQ_Any.Fields.Fields[1].AsString);
                li.SubItems.Add(DM.ADOQ_Any.Fields.Fields[0].AsString);
                DM.ADOQ_Any.Next;
            end;
        end;end;procedure TfrmMain.chkSortClick(Sender: TObject);
    begin
    cbxSort.Enabled:=chkSort.Checked;
    end;procedure TfrmMain.FormCreate(Sender: TObject);
    var
      Path: String;
    begin
      Path := ExtractFilePath(ParamStr(0));
      spSkinData1.LoadFromFile(Path + 'skin\skin.ini');edtSearch.Text:='';
    cbxSort.Text:='';
    mdbFileName:=ExtractFilePath(Application.ExeName)+'wt_data';if not FileExists(mdbFileName) then
        if not CreateMDB then Application.Terminate;DM.ADOConnection1.Close;
    DM.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source='+mdbFileName;
    DM.ADOConnection1.Open;end;procedure TfrmMain.LVSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    begin
    DM.at_Data.Filter:='id='+item.SubItems[1];end;procedure TfrmMain.btnInsertClick(Sender: TObject);
    var
        i:integer;
    begin
    try
        frmEdit:=TfrmEdit.Create(nil);
        DM.ADOQ_Any.Close;
        DM.ADOQ_Any.SQL.Clear;
        DM.ADOQ_Any.SQL.Add('select distinct sorts from data');
        DM.ADOQ_Any.Open;
        if DM.ADOQ_Any.RecordCount>0 then
        begin
            for i:=1 to DM.ADOQ_Any.RecordCount do
            begin
                frmEdit.dcbSort.Items.Add(DM.ADOQ_Any.Fields.Fields[0].AsString);
                DM.ADOQ_Any.Next;
            end;
        end;
        frmEdit.ShowModal;
        frmEdit.Free;
    except
        frmEdit.Free;
    end;end;procedure TfrmMain.btnPrintClick(Sender: TObject);
    begin
    frmPrint.QuickRep1.Preview;
    end;procedure TfrmMain.btnAboutClick(Sender: TObject);
    begin
    try
        frmAbout:=TfrmAbout.Create(nil);
        frmAbout.ShowModal;
        frmAbout.Free;
    except
        frmAbout.Free;
    end;end;procedure TfrmMain.btnHelpClick(Sender: TObject);
    begin
    try
        frmHelp:=TfrmHelp.Create(nil);
        frmHelp.ShowModal;
        frmHelp.Free;
    except
        frmHelp.Free;
    end;end;function TfrmMain.CreateMDB: boolean;
    var
      CreateAccess:OleVariant;
    begin
    try
        CreateAccess:=CreateOleObject('ADOX.Catalog');
        //CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+mdbFileName);
        CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+mdbFileName);    DM.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source='+mdbFileName;    //创建表
        DM.ADOQ_Any.Close;
        DM.ADOQ_Any.SQL.Text:=c_data;
        DM.ADOQ_Any.ExecSQL;    DM.ADOQ_Any.SQL.Text:=c_Passwd;
        DM.ADOQ_Any.ExecSQL;    DM.ADOQ_Any.SQL.Text:='insert into passwd values(:Id,:Pw)';
        DM.ADOQ_Any.Parameters.ParamValues['Id']:='User';
        DM.ADOQ_Any.Parameters.ParamValues['Pw']:=DateToStr(now);
        DM.ADOQ_Any.ExecSQL;    DM.ADOQ_Any.SQL.Text:='insert into passwd values(:Id,:Pw)';
        DM.ADOQ_Any.Parameters.ParamValues['Id']:='system';
        DM.ADOQ_Any.Parameters.ParamValues['Pw']:='system';
        DM.ADOQ_Any.ExecSQL;    result:=true;
    except
        result:=false;
        Application.MessageBox('无法创建数据库。','提示',MB_OK+MB_ICONWARNING);
    end;
    end;procedure TfrmMain.btnPwClick(Sender: TObject);
    begin
    try
        frmChangPw:=TfrmChangPw.Create(nil);
        frmChangPw.ShowModal;
        frmChangPw.Free;
    except
        frmChangPw.Free;
    end;end;end. 
      

  8.   

    能请教一下楼上的,下面这两段代码什么意思啊 
    if (DM.ADOQ_Any.Fields.Fields[0].AsDateTime>now+1)
        or(DM.ADOQ_Any.Fields.Fields[0].AsDateTime<now-31)

     DM.ADOQ_Any.SQL.Add('and sorts like :sort');
     DM.ADOQ_Any.Parameters.ParamByName('sort').DataType:=ftString;
     DM.ADOQ_Any.Parameters.ParamValues['sort']:='%'+cbxSort.Text+'%';
    多谢了啊另外提一点建议:对于同一个对象也可以用with ..do
      

  9.   

    if (DM.ADOQ_Any.Fields.Fields[0].AsDateTime>now+1)
        or(DM.ADOQ_Any.Fields.Fields[0].AsDateTime<now-31)这个是限制使用时间为一个月。 DM.ADOQ_Any.SQL.Add('and sorts like :sort');
     DM.ADOQ_Any.Parameters.ParamByName('sort').DataType:=ftString;
     DM.ADOQ_Any.Parameters.ParamValues['sort']:='%'+cbxSort.Text+'%';
    这是动态加了个参数,并对其赋值。用with .. do 是可以少写代码,但却不易阅读。