http://www.delphibbs.com/delphibbs/dispq.asp?lid=3165802

解决方案 »

  1.   

    操作系统:win 2000
    开发工具: delphi 2005
    数据库:oracle 9i
    我发现delphi2005使用dbexpress时候,对于参数使用存在不能刷新数据问题(即在edit1中输入不同 参数值,重新查询数据,结果dbgrid中数据一样没变化,delphi7没有这个问题:)),不知道是不是我的问题,现在把发现问题过程描述如下,希望有经验的人指点迷津,谢谢.
    步骤一、delphi7和delphi2005各新建一个工程,在主界面上分别放置TSQLConnection\TSQLQuery\TDataSetProvider\TClientDataSet\TDataSource\TDBGrid\TEdit\TButton,设置属性如下:(注,数据库密码用户名欠奉)
    object Form1: TForm1
      Left = 192
      Top = 107
      Width = 696
      Height = 480
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      OnClose = FormClose
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object DBGrid1: TDBGrid
        Left = 16
        Top = 16
        Width = 657
        Height = 273
        DataSource = DataSource1
        ImeName = '中文 (简体) - 智能 ABC'
        TabOrder = 0
        TitleFont.Charset = DEFAULT_CHARSET
        TitleFont.Color = clWindowText
        TitleFont.Height = -11
        TitleFont.Name = 'MS Sans Serif'
        TitleFont.Style = []
      end
      object Button1: TButton
        Left = 240
        Top = 320
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 1
        OnClick = Button1Click
      end
      object Edit1: TEdit
        Left = 432
        Top = 328
        Width = 73
        Height = 21
        ImeName = '中文 (简体) - 智能 ABC'
        TabOrder = 2
        Text = 'Edit1'
      end
      object DataSource1: TDataSource
        DataSet = ClientDataSet1
        Left = 64
        Top = 88
      end
      object SQLConnection1: TSQLConnection
        ConnectionName = 'OracleConnection'
        DriverName = 'Oracle'
        GetDriverFunc = 'getSQLDriverORACLE'
        LibraryName = 'dbexpora.dll'
        LoginPrompt = False
        Params.Strings = (
          'DriverName=Oracle'
          'DataBase=noah_gz'
          'User_Name=' //用户名,密码欠奉
          'Password='
          'RowsetSize=20'
          'BlobSize=-1'
          'ErrorResourceFile='
          'LocaleCode=0000'
          'Oracle TransIsolation=ReadCommited'
          'OS Authentication=False'
          'Multiple Transaction=False'
          'Trim Char=False'
          '=')
        VendorLib = 'oci.dll'
        Left = 128
        Top = 64
      end
      object DataSetProvider1: TDataSetProvider
        DataSet = SQLQuery1
        Left = 96
        Top = 136
      end
      object SQLQuery1: TSQLQuery
        MaxBlobSize = -1
        Params = <>
        SQLConnection = SQLConnection1
        Left = 224
        Top = 88
      end
      object ClientDataSet1: TClientDataSet
        Aggregates = <>
        Params = <>
        ProviderName = 'DataSetProvider1'
        Left = 168
        Top = 152
      end
    end
    步骤二、代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SQLQuery1.Close;
      ClientDataSet1.Active:=False;
      SQLQuery1.SQL.Clear;
      SQLQuery1.SQL.Add('select typename,path from utype where typeid=:typeid');
      SQLQuery1.ParamByName('typeid').AsString:=Edit1.Text;
      ClientDataSet1.Active:=True;
    end;
      
    补充一下,还有如下代码:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SQLConnection1.Open;
    end;
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      SQLConnection1.Close;
    end;
      

  2.   

    你把sql string 在设计时写入sqlquery1中的commandtext中,然后在button1Click中
    用ClientDataSet1.ParamByName('typeid').AsString:=Edit1.Text;试试看。我是这样做的,没有发现有什么问题。
      

  3.   

    to :Jumpi(Delphiing)
    怎么是ClientDataSet1.ParamByName('typeid').AsString:=Edit1.Text;?
    应该是SQLQuery1.ParamByName('typeid').AsString:=Edit1.Text;我按照你说的,在设计时把select typename,path from utype where typeid=:typeid填写到sqlquery1的sql属性中,然后代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SQLQuery1.Close;
      ClientDataSet1.Active:=False;
      //ClientDataSet1.
      //SQLQuery1.SQL.Clear;
      //SQLQuery1.SQL.Add('select typename,path from utype where typeid=:typeid');
      SQLQuery1.ParamByName('typeid2').AsString:=Edit1.Text;
      ClientDataSet1.Active:=True;end;
    在Edit1.text中填写参数值,还是不能变化刷新