http://www.delphibbs.com/delphibbs/dispq.asp?lid=3165802
解决方案 »
- delphi 如何取出数据库中的记录 并分别显示出来?我按下面写的 但是只能显示一条记录 谁能帮我修改一下?谢谢大家
- ListView控件内部怎么才能捕捉到相应事件,SOS
- 为什么编译不通过,我认为是向前声明的问题,急!!!各位大侠请指教
- 自己创建了一个IMAGE,为什么不能显示彩色?
- 如何让我的datasnap变为无状态?
- 如何从存储过程返回real类型的数据?
- DBGrid的问题!!!!!!!!!!!!!!!!!!!!!!!!
- SQL查询语句生成及分析器,欢迎使用
- 高手快来拿分!!!
- 各为老兄:请问oracle里面有没有货币类型--------我是orcale初学者,请帮忙
- 关于数据库中表复制的问题,高手请进!!!
- TreeView问题
开发工具: 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;
用ClientDataSet1.ParamByName('typeid').AsString:=Edit1.Text;试试看。我是这样做的,没有发现有什么问题。
怎么是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中填写参数值,还是不能变化刷新