全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1813
推到 Plurk!
推到 Facebook!

在兩個Form的窗體中調用數據出現異常

答題得分者是:pedro
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-02-27 08:34:42 IP:220.198.xxx.xxx 未訂閱
unit erp_search; //查詢窗體
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type
Tsearch = class(TForm)
BtOK: TButton;
Label2: TLabel;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
Label3: TLabel;
Label4: TLabel;
sc_prno: TComboBox;
BTall: TButton;
BTsearch: TButton;
Label6: TLabel;
DateTimePicker3: TDateTimePicker;
DateTimePicker4: TDateTimePicker;
Label7: TLabel;
Label9: TLabel;
Label10: TLabel;
DateTimePicker5: TDateTimePicker;
DateTimePicker6: TDateTimePicker;
BT_GD: TButton;
sc_list: TComboBox;
BT_TJ: TButton;
Label11: TLabel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
Button1: TButton;
procedure BtOKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BTallClick(Sender: TObject);
procedure BTsearchClick(Sender: TObject);
procedure BT_GDClick(Sender: TObject);
procedure BT_TJClick(Sender: TObject);
procedure Button1Click(Sender: TObject);

private
// function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;
{ Private declarations }
public
{ Public declarations }
end;

var
search: Tsearch;

implementation
uses procrate_list; //調用list
{$R *.dfm}
//function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;
//begin
// Result:=Copy(AText,1,ACount);
//end;


procedure Tsearch.BtOKClick(Sender: TObject);
var
mydate1,mydate2:tdatetime;
str:string;
begin

list.ADOQuery1.close;
list.ADOQuery1.sql.clear;
list.ADOQuery1.sql.add('select iesc00h.sc_prdat as 投產日期, iesc00h.sc_odno as 工令單號,');
list.ADOQuery1.sql.add('iesc00h.el_no as 料號,iesc00h.ie_sure as 工單確認,iesc00h.ie_ymd as 工令單建立日期,iesc00h.sc_prno as 生產線,');
list.ADOQuery1.sql.add('iesc29d1.sc_list as 工單涷結註記,iesc21h.sc_rcno as 途程單,iesc24d1.sc_list as 制造通知單號, ');
list.ADOQuery1.sql.add('iemt14d1.mt_list as 領料申請單號, iemt14d1.mt_mlist as 生產領料單號, ');

list.ADOQuery1.sql.add('iesc00h.sc_dlqty1 as 完成數量 from iemis.iesc00h ');
list.ADOQuery1.sql.add('left outer join iemis.iesc21h on ( iemis.iesc00h.sc_odno = iemis.iesc21h.sc_odno) ');
list.ADOQuery1.sql.add('left outer join iemis.iesc24d1 on ( iemis.iesc00h.sc_odno = iemis.iesc24d1.sc_odno) ');
list.ADOQuery1.sql.add('left outer join iemis.iemt14d1 on ( iemis.iesc00h.sc_odno = iemis.iemt14d1.sc_odno) ');
list.ADOQuery1.sql.add('left outer join iemis.iesc29d1 on ( iemis.iesc00h.sc_odno = iemis.iesc29d1.sc_odno) ');

list.ADOQuery1.sql.add('where iesc00h.sc_prdat>=:AA and iesc00h.sc_prdat<=:BB ');
list.ADOQuery1.sql.add('and iesc00h.sc_prno like :CC ' );
list.ADOQuery1.sql.add(' order by iesc00h.sc_prdat');
mydate1:= DateTimePicker1.date;
list.ADOQuery1.parameters.ParamByName('AA').value:=formatdatetime('yyyy/mm/dd',mydate1);
mydate2:= DateTimePicker2.date;
list.ADOQuery1.parameters.ParamByName('BB').value:=formatdatetime('yyyy/mm/dd',mydate2);
str:=copy(sc_prno.text,1,4);
list.ADOQuery1.parameters.ParamByName('CC').value:=trim(str);
list.ADOQuery1.Active:=True;
list.ADOQuery1.open;
list.Label1.Caption:='投產明細查詢條件:';
List.show;
close;
end;

procedure Tsearch.FormCreate(Sender: TObject);
var
iYear,iMonth,iDay:Word;
begin
DecodeDate(Now,iYear,iMonth,iDay);
DateTimePicker1.Date:=EncodeDate(iYear,iMonth,iDay);
DateTimePicker2.Date:=EncodeDate(iYear,iMonth,iDay);
DateTimePicker3.Date:=EncodeDate(iYear,iMonth,iDay);
DateTimePicker4.Date:=EncodeDate(iYear,iMonth,iDay);
DateTimePicker5.Date:=EncodeDate(iYear,iMonth,iDay);
DateTimePicker6.Date:=EncodeDate(iYear,iMonth,iDay);
end;

procedure Tsearch.BTallClick(Sender: TObject);
var
mydate1,mydate2:tdatetime;
begin
list.ADOQuery1.close;
list.ADOQuery1.sql.clear;
list.ADOQuery1.sql.add('select iesc00h.sc_prdat as 投產日期, iesc00h.sc_odno as 工令單號,');
list.ADOQuery1.sql.add('iesc00h.el_no as 料號,iesc00h.ie_sure as 工單確認,iesc00h.ie_ymd as 工令單建立日期,iesc00h.sc_prno as 生產線,iesc29d1.sc_list as 工單涷結註記,');
list.ADOQuery1.sql.add('sc_qty as 排產數量,iesc00h.sc_dlqty1 as 完成數量 from iemis.iesc00h ');
list.ADOQuery1.sql.add('left outer join iemis.iesc29d1 on ( iemis.iesc00h.sc_odno = iemis.iesc29d1.sc_odno) ');
list.ADOQuery1.sql.add('where iesc00h.sc_prdat>=:AA and iesc00h.sc_prdat<=:BB ');
list.ADOQuery1.sql.add(' order by sc_prdat');
mydate1:= DateTimePicker1.date;
list.ADOQuery1.parameters.ParamByName('AA').value:=formatdatetime('yyyy/mm/dd',mydate1);
mydate2:= DateTimePicker2.date;
list.ADOQuery1.parameters.ParamByName('BB').value:=formatdatetime('yyyy/mm/dd',mydate2);

list.ADOQuery1.Active:=True;
list.ADOQuery1.open;
list.Label1.Caption:='投產明細查詢條件:';
List.show;
close;
end;


unit procrate_list; //查詢結果顯示窗體
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, ADODB, OleServer,
Excel2000;

type
TList = class(TForm)
DBGrid1: TDBGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
BTExcel: TButton;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
procedure Label2Click(Sender: TObject);
procedure Label3Click(Sender: TObject);
procedure BTExcelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
List: TList;

implementation
uses erp_search, erp_logo,DBGrid2Excel;

//search窗體中進行查詢,list窗體中顯示結果,以前都可以正常顯示,但是最近老是報錯,我檢查所有與數據庫的連結,都沒有問題,但是就是報錯,不管哪個查詢按鈕,只要點擊查詢按鈕,都會在與之對應的那個按鈕下報錯,比如說上面程式,我點擊procedure Tsearch.BTallClick(Sender: TObject); 他就會在這個按鈕下的帶有list字樣的地方報錯。程式的其他地方皆是如此類似。所以煩請高手指點迷津~!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-02-27 09:45:29 IP:60.248.xxx.xxx 未訂閱
您的錯誤訊息是什麼?
我在猜想應是TList這個Form,應該沒有Create,所以你用list.XXXX去引用裡面的物件,就會報錯
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-02-27 11:02:51 IP:220.198.xxx.xxx 未訂閱

===================引 用 文 章===================
您的錯誤訊息是什麼?
我在猜想應是TList這個Form,應該沒有Create,所以你用list.XXXX去引用裡面的物件,就會報錯

錯誤訊息如下:
project ERP.exe raised exception class EAccess Violation with message 'Access violation at address 004E6115 in module' ERP.exe '. Read of address 0000030C'. Process stopped . use step or run to continue.

// 且程式中也會指到帶有list的行中。
你的猜想不無道理,但是之前怎麼就可以呢?如果不行,之前就會調不出數據,所以我有時想不通,如依你的想法去,是否在list中create裡面讓他獲取某個控件的焦點,但是程式怎樣調動得到list.ADOQuery1呢?或者還有其他因素呢?
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-02-27 11:06:38 IP:60.248.xxx.xxx 未訂閱
這個錯誤訊息是記憶體存取錯誤沒錯
請用逐行執行方法去追蹤看看是否那個物件沒有被create實例化
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-27 11:57:47 IP:220.198.xxx.xxx 未訂閱

===================引 用 文 章===================
這個錯誤訊息是記憶體存取錯誤沒錯
請用逐行執行方法去追蹤看看是否那個物件沒有被create實例化

我一直按F8,程式會一直執行下去,沒有出現什麼特殊的提示,所以無法獲知那個物件沒有create實例化?
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-01 20:33:17 IP:220.198.xxx.xxx 未訂閱
謝謝樓上的大師,只要在每個按鈕插入一條這樣的類似語句:Application.CreateForm(TList, List); 就可以了!
books
一般會員


發表:9
回覆:27
積分:7
註冊:2006-10-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-03 08:20:52 IP:58.252.xxx.xxx 未訂閱
我己結案但是沒有反應呢,結案按鈕無效呢?請版主注意查看!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-03 10:13:28 IP:220.130.xxx.xxx 訂閱
結案按鈕旁有個下拉選單,請選擇一位你認為合適的給分者,再按結案。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
系統時間:2024-05-19 2:18:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!