ADO連結SQL將資料呈現TreeView及DBGrid後,以Rave列印的問題 |
答題得分者是:st33chen
|
boss1215
一般會員 發表:6 回覆:10 積分:3 註冊:2009-03-09 發送簡訊給我 |
求救於各位大大~
工作的關係,對於完全不懂程式的我,相當頭痛,看書本研究仍沒辦法做到我想要的結果。 我想以TADO元件連結SQL Server資料庫,並且以Delphi呼叫Rave Report報表列印 資料庫中會用到 TF. UKS 三個資料表格,Primary Key = BOM_NO From上放入
> TreeView出現 A |-- A01 |---A001 |---A0011 |---A002 |-- B01 |---B011 |-- C (父節點由MF得來,子節點由TF得來) >且滑鼠點選的節點,資料都可在DBGrid呈現供檢查 >之後由TreeView點選到的資料列印 問題一 各位大大..我Code該怎麼寫??? 問題二 父節點列印的格式與子節點列印的格式不同,要如何能夠將父節點與子節點連接一起列印? 不然頁碼無法連結。 希望各位大大能懂我的需求,雖然似乎也講不太清楚~有勞各位
------
Wa |
boss1215
一般會員 發表:6 回覆:10 積分:3 註冊:2009-03-09 發送簡訊給我 |
以下是我試著學習看來的文章以及書本寫的Code..還沒完成
但是 1.一直有ADOTFB:Parameter'bom_no' not found 的錯誤訊息,但我不知道原因 2.TreeView..有跑..但都沒顯現出來.且Form都不動了..會不會是因為資料太多筆?? 麻煩各位大大請幫我看一下~~~<第一次寫Code.錯誤很多~煩請大大們指教> [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, ComCtrls, RpCon, RpConDS, RpBase, RpSystem, RpDefine, RpRave, DB, ADODB; type TForm1 = class(TForm) TreeView1: TTreeView; DBGrid1: TDBGrid; Label1: TLabel; Edit1: TEdit; Button1: TButton; Button2: TButton; ListBox1: TListBox; DataSource1: TDataSource; ADOConnection1: TADOConnection; ADOMFB: TADOQuery; ADOTFB: TADOQuery; ADOUKS: TADOQuery; RvProject1: TRvProject; RvSystem1: TRvSystem; RvDataSetMFB: TRvDataSetConnection; RvDataSetTFB: TRvDataSetConnection; RvDataSetUKS: TRvDataSetConnection; procedure Button2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ListBox1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure TreeView1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Newnode: TTreeNode; begin with adoMFB do begin sql.clear; sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO Like ''%' edit1.Text '%'''); close; open; first; while not (adoMFB.eof) do Newnode:=treeview1.items.add(nil,adomfb.fieldbyname('BOM_NO').ASString '>' (adomfb.FieldByName('NAME')).asstring); begin with adoTFB do begin sql.Clear; sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME'); sql.Add(' from TF_BOM AS T,TF_UKS AS U, MF_BOM AS M '); sql.Add(' where T.BOM_NO=:BOM_NO'); Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); close; open; first; while not adoTFB.Eof do begin treeview1.Items.AddChild(newnode,adoTFB.fieldbyname('PRD_NO').value); next; end; end; next; end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin RvProject1.Execute; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin try ADOConnection1.Connected:=true; except showmessage('無法中斷連線!'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin try ADOConnection1.Connected:=true; except showmessage('無法連線!'); end; Rvproject1.Open; Rvproject1.getreportlist(Listbox1.items,true); end; procedure TForm1.ListBox1Click(Sender: TObject); begin Rvproject1.selectreport(listbox1.Items[listbox1.itemindex],true); end; procedure TForm1.TreeView1Click(Sender: TObject); begin if treeview1.Selected.Level=1 then begin with ADOMFB DO begin SQL.Clear; sql.add('select BOM_NO,PRD_NO,NAME,SPC,QTY from MF_BOM where BOM_NO''%' edit1.Text '%'''); Parameters.ParamByName('BOM_NO').Value:=copy(treeview1.Selected.Text,4,2); showmessage(copy(treeview1.Selected.Text,4,2)); CLOSE; open; //treeview1.Selected:=nil; end; if treeview1.Selected.Level=2 then With ADOMFB DO begin Close; SQL.Clear; SQL.Add('select BOM_NO,PRD_NO,NAME,SPC,QTY from ADOMFB'); if Edit1.Text<>'' then sql.Add('where BOM_NO LIKE ''%' Edit1.text '%'' '); Parameters.ParamByName('BOM_NO').Value:=copy(treeview1.Selected.Text,2,4); showmessage(copy(treeview1.Selected.Text,2,4)); Open; end; end; end; end. [/code]
------
Wa |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
with adoTFB do begin
sql.Clear; sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME'); sql.Add(' from TF_BOM AS T,TF_UKS AS U, MF_BOM AS M '); // 可能是動態給 sql.text, 參數沒處理好 , 如果是 design time 就把 sql.text 寫到 adoTFB 應該也可以解決 . // sql.Add(' where T.BOM_NO=:BOM_NO'); // Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); sql.Add(' where T.BOM_NO=''' copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2) ''''); close; open; first; while not adoTFB.Eof do begin treeview1.Items.AddChild(newnode,adoTFB.fieldbyname('PRD_NO').value); next; end; end;
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
BOSS
中階會員 發表:70 回覆:79 積分:64 註冊:2006-11-01 發送簡訊給我 |
|
boss1215
一般會員 發表:6 回覆:10 積分:3 註冊:2009-03-09 發送簡訊給我 |
TO st33chen
不好意思~我不太懂你的意思. 請問一下..Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 這行Code有什麼意思?? ===================引 用 st33chen 文 章=================== with adoTFB do begin sql.Clear; sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME'); sql.Add(' from TF_BOM AS T,TF_UKS AS U, MF_BOM AS M '); // 可能是動態給 sql.text, 參數沒處理好 , 如果是 design time 就把 sql.text 寫到 adoTFB 應該也可以解決 . // sql.Add(' where T.BOM_NO=:BOM_NO'); // Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); sql.Add(' where T.BOM_NO=''' copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2) ''''); close; open; first; while not adoTFB.Eof do begin treeview1.Items.AddChild(newnode,adoTFB.fieldbyname('PRD_NO').value); next; end; end;
------
Wa |
boss1215
一般會員 發表:6 回覆:10 積分:3 註冊:2009-03-09 發送簡訊給我 |
TO BOSS大大
請教一下加入的這行 Parameters.ParamByName('BOM_NO').datatype:=ftstring 有什麼意思?? 麻煩您說明一下.程式方面我很不懂 我試過.加入後好像沒任何變動 ===================引 用 BOSS 文 章===================
------
Wa |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您的程式片段 : with adoTFB do begin sql.Clear; sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME'); sql.Add(' from TF_BOM AS T,TF_UKS AS U, MF_BOM AS M '); sql.Add(' where T.BOM_NO=:BOM_NO'); Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 其中 sql.Add(' where T.BOM_NO=:BOM_NO'); 是說 這一個 sql statement 有參數, 名為 bom_no (用 : 帶頭的就是 sql 的參數) 而 Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 就是 給這個參數值 我建議的解法是不要寫 sql.Add(' where T.BOM_NO=:BOM_NO'); 這一句 這樣就沒有參數, 所以 Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 也不用寫, 直接改成給值的語法 sql.Add(' where T.BOM_NO=''' copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2) ''''); <---注意單引號的數目 或是在 designtime 就把 select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME from TF_BOM AS T,TF_UKS AS U, MF_BOM AS M where T.BOM_NO=:BOM_NO 寫進 adoTFB 的 sql 屬性中, delphi 會幫您建 bom_no 這個參數, 這樣, 您的程式就改成 with adoTFB do begin close; Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); open; ... (以下照原程式, 沒改) 就可以了 提醒一下, delphi 中 // 代表註解, 也就是不會 compile 的句子, 這您知道吧. Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 這一句是您寫的, 不是我. ===================引 用 boss1215 文 章=================== TO st33chen 不好意思~我不太懂你的意思. 請問一下..Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 這行Code有什麼意思??
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
boss1215
一般會員 發表:6 回覆:10 積分:3 註冊:2009-03-09 發送簡訊給我 |
to st33chen 大大
非常感謝你花了時間說明給我...讓我多懂一些了 我先試著修改看看 ===================引 用 st33chen 文 章=================== 您的程式片段 : with adoTFB do begin sql.Clear; sql.Add('select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME'); sql.Add(' from TF_BOM AS T,TF_UKS AS U, MF_BOM AS M '); sql.Add(' where T.BOM_NO=:BOM_NO'); Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 其中 sql.Add(' where T.BOM_NO=:BOM_NO'); 是說 這一個 sql statement 有參數, 名為 bom_no (用 : 帶頭的就是 sql 的參數) 而 Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 就是 給這個參數值 我建議的解法是不要寫 sql.Add(' where T.BOM_NO=:BOM_NO'); 這一句 這樣就沒有參數, 所以 Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 也不用寫, 直接改成給值的語法 sql.Add(' where T.BOM_NO=''' copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2) ''''); <---注意單引號的數目 或是在 designtime 就把 select distinct T.BOM_NO,T.PRD_NO,T.NAME,U.UNIT,T.QTY,U.PRD_KND,U.USEIN_NAME from TF_BOM AS T,TF_UKS AS U, MF_BOM AS M where T.BOM_NO=:BOM_NO 寫進 adoTFB 的 sql 屬性中, delphi 會幫您建 bom_no 這個參數, 這樣, 您的程式就改成 with adoTFB do begin close; Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); open; ... (以下照原程式, 沒改) 就可以了 提醒一下, delphi 中 // 代表註解, 也就是不會 compile 的句子, 這您知道吧. Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 這一句是您寫的, 不是我. ===================引 用 boss1215 文 章=================== TO st33chen 不好意思~我不太懂你的意思. 請問一下..Parameters.ParamByName('BOM_NO').value:=copy(adoMFB.fieldbyname('BOM_NO').asstring,1,2); 這行Code有什麼意思??
------
Wa |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |