線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1353
推到 Plurk!
推到 Facebook!

delphi7 与 oracle9i

尚未結案
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-13 16:43:50 IP:219.137.xxx.xxx 未訂閱
请问各位前辈: 我现在使用DBexpress里面的SQLQuery访问ORACLE 9i 中建立的table,例如说:访问oracle中的“表”下面的“EMGT”里面的“MODEL_MASTER"。 我使用这样的SQL语句: begin self.SQLQuery1.Close; self.SQLQuery1.SQL.Clear; self.SQLQuery1.SQL.Text:='select code,model,brand,unitprice,init_qty,curr_qty'; self.SQLQuery1.SQL.Append('from "SIHDB2.EMGT.MODEL_MASTER" '); self.SQLQuery1.SQL.Append('where code<>"" '); self.SQLQuery1.open; end; 在语句中的from后面要怎样书写才是正确的,我现在不管怎么修改总是出现这样的错误: “General SQL error,ORA-24337:未准备语句句柄”,或者是其他的原因? 请赐教!谢谢!
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-13 17:30:36 IP:210.66.xxx.xxx 未訂閱
引言: self.SQLQuery1.SQL.Text:='select code,model,brand,unitprice,init_qty,curr_qty'; self.SQLQuery1.SQL.Append('from "SIHDB2.EMGT.MODEL_MASTER" ');
from 之前面要不要加空格 ?
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-13 23:30:27 IP:203.204.xxx.xxx 未訂閱
self.SQLQuery1.Close; self.SQLQuery1.SQL.Clear; self.SQLQuery1.SQL.Text:=''select code,model,brand,unitprice,init_qty,curr_qty '; self.SQLQuery1.SQL.Append('from EMGT.MODEL_MASTER '); self.SQLQuery1.SQL.Append('where code<>"" '); self.SQLQuery1.open; "SIHDB2.EMGT.MODEL_MASTER"這樣下會被當成字串 而不是table name,且oracle是用owner去分,看起來SIHDB2是資料庫名稱, 而EMGT是OWNER,若你想跨資料庫查資料要不用這麼下SQL,且資料庫也需設 定過後才能讓你跨資料庫唷^_^ <[忙盲茫]> ☆會程式不是罪啊☆
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-14 11:14:13 IP:219.137.xxx.xxx 未訂閱
如图 我现在要利用SQLQuery从这个model_master里面拿数据出来,然后用quickreport报表显示,该怎么写SQL语句? 不知道问题在那里?急。。。。。。。。
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-14 11:20:17 IP:219.137.xxx.xxx 未訂閱
yu_blake
一般會員


發表:0
回覆:23
積分:14
註冊:2003-01-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-14 17:53:34 IP:218.163.xxx.xxx 未訂閱
您好~      
 
begin
self.SQLQuery1.Close;
self.SQLQuery1.SQL.Clear;
self.SQLQuery1.SQL.Text:='select code,model,brand,unitprice,init_qty,curr_qty';
self.SQLQuery1.SQL.Append('from "SIHDB2.EMGT.MODEL_MASTER" ');
self.SQLQuery1.SQL.Append('where code<>"" ');
self.SQLQuery1.open;
end;
 
應該改成如下
 
begin
self.SQLQuery1.Close;
self.SQLQuery1.SQL.Clear;
self.SQLQuery1.SQL.Text:='select code,model,brand,unitprice,init_qty,curr_qty';
self.SQLQuery1.SQL.Append('from  EMGT.MODEL_MASTER  ');
self.SQLQuery1.SQL.Append('where code  is not null  ');
self.SQLQuery1.open;
end;
 
試試看囉
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-15 11:05:07 IP:218.20.xxx.xxx 未訂閱
hi,yu_blake 为什么我改成你这种形式,结果又出现错误: “operation not allowed on a unidirectional dataset", 接着我用BDE里面的query来做测试, self.Query1.Close; self.Query1.SQL.Clear; self.Query1.SQL.Text:='select code,model,brand,unitprice,init_qty,curr_qty'; self.Query1.SQL.Append('from EMGT.MODEL_MASTER '); self.Query1.SQL.Append('where code is not null'); self.Query1.Prepare; self.Query1.Open; form4.QuickRep1.Preview; 可以在报表中正常显示,但是我现在需要有选择的显示报表资料,也就是说当我在中间加入语句: if not (combobox5.text = '') and not (combobox6.Text = '') then self.Query1.SQL.Append('and ( code between "' combobox5.Text '" and "' combobox6.Text '")'); if not (combobox6.Text = '') and (combobox5.Text = '') then self.Query1.SQL.Append('and ( code = "' combobox6.Text '")'); if not (combobox5.Text = '') and (combobox6.Text = '') then self.Query1.SQL.Append('and ( code = "' combobox5.Text '")'); 这时又会出项错误:"invalid field name" 应该是oracle不识别combobox5,combobox6这些name,我该怎么办? 请各位前辈请教,急。。。。。。。。。
yu_blake
一般會員


發表:0
回覆:23
積分:14
註冊:2003-01-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-15 14:52:44 IP:218.163.xxx.xxx 未訂閱
hi 您好    dbexpress Query 元件是單向的 意即只能從頭捲到尾 所以一般都會搭配 可雙向的捲動的 dataset 來使用 如clientdata set    而你可能 直接單獨使用 dbexpress Query 元件  跟DBGrid 或 其他可雙向捲動的元件使用  所以 出現 該錯誤訊息    "operation not allowed on a unidirectional dataset",    改成BDE當然就不會有這個問題 SQL 語法部分 如果你的 code 欄位是數值的話 所以必須要改成這樣
self.Query1.SQL.Append('and ( code between '   combobox5.Text   ' and '   combobox6.Text   ')');
如果code欄位是字串的話 則必須寫成這樣
self.Query1.SQL.Append('and ( code between '   #39   combobox5.Text   #39   ' and '   #39   combobox6.Text   #39  ')');
p.s delphi中以#39來表示單引號 以兩個單引號括住表示為字串 hope helpful.
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-18 15:36:44 IP:218.19.xxx.xxx 未訂閱
hi,yu_blake 谢谢你的指教! 现在又有一个问题出现,就是我使用clientdataset时: dm.SQLQuery2.Active:=true; dm.SQLQuery2.Close; dm.SQLQuery2.SQL.Clear; dm.SQLQuery2.SQL.Text:='select code,model,brand,unitprice,init_qty,curr_qty'; dm.SQLQuery2.SQL.Append('from EMGT.MODEL_MASTER '); dm.SQLQuery2.SQL.Append('where code is not null '); if not (combobox1.text = '') and not (combobox2.Text = '') then dm.SQLQuery2.SQL.Append('and ( code between ' #39 combobox1.Text #39 ' and ' #39 combobox2.Text #39 ')'); if not (combobox1.Text = '') and (combobox2.Text = '') then dm.SQLQuery2.SQL.Append('and ( code = ' #39 combobox1.Text #39 ')'); if not (combobox2.Text = '') and (combobox1.Text = '') then dm.SQLQuery2.SQL.Append('and ( code = ' #39 combobox2.Text #39 ')'); dm.SQLQuery2.Open; dm.ClientDataSet2.Active:=true; dm.ClientDataSet2.ApplyUpdates(-1); form4.QuickRep1.Preview;(使用clientdataset2里面的值) 在combobox1,combobox2里面输入一次值以后,quickreport可以正常显示出来数据,但是我接着在combobox1,combobox2里面写入新的值,在点击这个按钮,结果quickreport还是显示上一次的数据,怎么都不会变?要关闭程序重新运行才可以得到新的数据,我不是已经加入了 dm.ClientDataSet2.ApplyUpdates(-1);这一条语句吗?怎么回事? 初次使用这些component,所以很多不懂,谢谢
yu_blake
一般會員


發表:0
回覆:23
積分:14
註冊:2003-01-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-18 17:05:29 IP:218.163.xxx.xxx 未訂閱
hi 您好.    Query內容有變動 clientdataset要重新取得的話 要先close再open 請把這兩行改成
  dm.ClientDataSet2.Active:=true; 
  dm.ClientDataSet2.ApplyUpdates(-1);    
  dm.ClientDataSet2.Close;
  dm.ClientDataSet2.Open;    
hope helpful. --
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-18 17:05:53 IP:218.19.xxx.xxx 未訂閱
呵呵,我自己搞定了!
liangzai
初階會員


發表:77
回覆:91
積分:33
註冊:2004-08-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-19 08:20:22 IP:218.19.xxx.xxx 未訂閱
hi,yu_blake 谢谢你的热心指教!以后有问题还请多帮忙!
系統時間:2024-06-27 3:18:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!