我在制作一个货物进销系统时,遇到一个问题,便把问题程序编在一个简单的程序里,一编译就出错,下面分别是数据模块和主程序代码,请各位老师帮忙找找错误。
unit data;interfaceuses
SysUtils, Classes, DB, ADODB;type
TDataModule2 = class(TDataModule)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
ADODataSet2: TADODataSet;
DataSource2: TDataSource;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule2: TDataModule2;implementation{$R *.dfm}end.//*注:adodataset1和2都用adoconnection1连接数据库,datasource1、2分别连adodataset1、2
,active都已设true;没编译时,dbgrid1数据显示正常。*// unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Grids, DBGrids;type
TForm1 = class(TForm)
DBComboBox1: TDBComboBox;
DBComboBox2: TDBComboBox;
DBGrid1: TDBGrid;
procedure DBComboBox1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
varstr:string;
implementationuses data;{$R *.dfm}procedure TForm1.DBComboBox1Change(Sender: TObject);
begin
varstr:=dbcombobox1.Text;
datamodule2.adodataset2.Close;
datamodule2.ADODataSet2.CommandText:='select * from 货物 where 类型='''+varstr+'''';
datamodule2.ADODataSet2.Open;
with datamodule2.ADODataSet1 do
begin
close;
commandtext:='select * from 货物 where 类型='''+varstr+'''';
open;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
datamodule2.ADODataSet2.close;
datamodule2.ADODataSet2.commandtext:='select distinct 类型 from 货物';
datamodule2.ADODataSet2.open;
datamodule2.ADODataSet2.First;
dbcombobox1.Items.Clear;
while not datamodule2.ADODataSet2.eof do
begin
dbcombobox1.Items.Add(datamodule2.ADODataSet2.fields[0].asstring);
datamodule2.ADODataSet2.next;
end;
end;end.
unit data;interfaceuses
SysUtils, Classes, DB, ADODB;type
TDataModule2 = class(TDataModule)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
ADODataSet2: TADODataSet;
DataSource2: TDataSource;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule2: TDataModule2;implementation{$R *.dfm}end.//*注:adodataset1和2都用adoconnection1连接数据库,datasource1、2分别连adodataset1、2
,active都已设true;没编译时,dbgrid1数据显示正常。*// unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Grids, DBGrids;type
TForm1 = class(TForm)
DBComboBox1: TDBComboBox;
DBComboBox2: TDBComboBox;
DBGrid1: TDBGrid;
procedure DBComboBox1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
varstr:string;
implementationuses data;{$R *.dfm}procedure TForm1.DBComboBox1Change(Sender: TObject);
begin
varstr:=dbcombobox1.Text;
datamodule2.adodataset2.Close;
datamodule2.ADODataSet2.CommandText:='select * from 货物 where 类型='''+varstr+'''';
datamodule2.ADODataSet2.Open;
with datamodule2.ADODataSet1 do
begin
close;
commandtext:='select * from 货物 where 类型='''+varstr+'''';
open;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
datamodule2.ADODataSet2.close;
datamodule2.ADODataSet2.commandtext:='select distinct 类型 from 货物';
datamodule2.ADODataSet2.open;
datamodule2.ADODataSet2.First;
dbcombobox1.Items.Clear;
while not datamodule2.ADODataSet2.eof do
begin
dbcombobox1.Items.Add(datamodule2.ADODataSet2.fields[0].asstring);
datamodule2.ADODataSet2.next;
end;
end;end.
解决方案 »
- FastReport行的问题
- 讨论一下Com/DCom的问题,欢迎来稿,深浅不限.......呵呵
- 如何使delphi程序在一个时间自动运行呢
- inherited;//这个关键字继承了那个父类, 是TChangeKeyForm的东西吗
- ctrl+t 的问题 急!! 谢谢各位高手!!
- 怎样突破Ttable 组件导入数据的64K限制问题
- 如何将打印的内容直接保存到本地的tif格式影像文件?
- 兄弟们帮帮忙,急。。。。。。
- 大家里到底应该学些什么才能为以后走上工作岗位更进一步的学习打好基础?
- 请问dbgrid的options在程序中如何修改
- 怎么取这里的两个数据??
- 最近做一项目,可能很多客户都在外省.在考虑用什么数据库...
放上面看看
violation at address 004AE6CA in module ' projict1.exe'.Read of address 00000064'.
Process stopped.Use Step or run to continue
使DataModule2在Form1前创建!
即!
Application.CreateForm(TDataModule2, DataModule2);
Application.CreateForm(TForm1, Form1);
逍遥叹老大:我找不到dpr文件,不知道在哪改,但我又写了一次,先建datamodule2,错误亦旧。唉,到底是咋回事呀
Form1
DataModule2
把DataModule2拖到Form1前面变成
DataModule2
Form1就行了.
因为您在form1创建时调用DataMoule2,如果次时DataMoule2未创建,就会出现地址错,因为DataMoule2需要在form1前面创建.
.exe上按右键,选择菜单项View Source,会出现:begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TDataModule2, DataModule2);
Application.Run;
end.把 Application.CreateForm(TDataModule2, DataModule2);
放到 Application.CreateForm(TForm1, Form1);
前面即可
和前面的做法效果一样.