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

SQL中的OLAP 問題

尚未結案
qq_911228
一般會員


發表:30
回覆:22
積分:10
註冊:2003-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-12 14:51:12 IP:218.164.xxx.xxx 未訂閱
以下是我程式碼的部份 我這個程式是要用到SQL中的OLAP ~~ 所以我的ADOCONNECT的連接是要到OLAP SERVER(如圖2) 當我要    unit MDXTestForm;    interface    uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   Grids, DBGrids, ExtCtrls, StdCtrls, DBCtrls, Db, ADODB,variants;    type   TForm1 = class(TForm)     Panel1: TPanel;     Memo1: TMemo;     Splitter1: TSplitter;     DBGrid1: TDBGrid;     DBNavigator1: TDBNavigator;     ComboBox1: TComboBox;     ADOConnection1: TADOConnection;     Button1: TButton;     ADOQuery1: TADOQuery;     DataSource1: TDataSource;     procedure ComboBox1Change(Sender: TObject);     procedure Button1Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;    var   Form1: TForm1;    implementation    {$R *.DFM}    procedure TForm1.ComboBox1Change(Sender: TObject); var   I : Integer; begin     I := ComboBox1.ItemIndex;  Memo1.Lines.Clear;  case I of  0:  Memo1.Lines.Add(      'SELECT {[Date].children} ON COLUMNS,' +      chr(13)+chr(10) +     '([cust].members) ON ROWS FROM Payment_Cube WHERE Freight'      );  1:  Memo1.Lines.Add(      'SELECT {[Date].children} ON COLUMNS,' +       chr(13)+chr(10)+ '([cust].members) ON ROWS ' +      'FROM Payment_Cube WHERE Payment'      );  2:  Memo1.Lines.Add(      'SELECT  {[Measures].Freight, ' +      '[Measures].Payment}' + chr(13)+chr(10)      +'ON COLUMNS,([cust].members) ON ROWS FROM Payment_Cube '      );  3:  Memo1.Lines.Add(       'SELECT Measures.members ON COLUMNS, '+       chr(13)+chr(10)+ '[cust].members ON ROWS  '+       'FROM Payment_Cube '       );  end; end;    procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin  If Memo1.Lines.Count > 0 Then   try   With ADOQuery1 do   begin     Close;        showmessage(Memo1.text);     showmessage(sql.text)   ;     SQL.Text := Memo1.Text;        ADOQuery1.Open;   end;    //Change appearance of the DBGrid   for I :=0 to DBGrid1.Columns.Count-1  do    DBGrid1.Columns[i].Width:=100;  except   ShowMessage('Invalid MDX query');  end; end;    end.
s9054469
一般會員


發表:21
回覆:35
積分:11
註冊:2003-04-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-22 10:57:11 IP:61.70.xxx.xxx 未訂閱
這個部份剛好跟我們專題有點關係,所以昨天跟我們老師Metting時, 請教了一下我們老師,雖然還找不出真正錯誤的原因,但測試的結果, 大致確定的是因為DataSource是OLAP Server的關係,如果你將MDX語法 一開始就放入ADOQuery的SQL裏去OPEN是不會出現這個錯誤訊息, 不然就是先將DataSource拿掉,再做ADOQuery.Sql.Test給MDX語法部份, 再來才給DataSource,然後在OPEN,這樣就不會產生那個錯誤訊息了. 所以大概的執行順序如下: procedure TForm1.Button1Click(Sender: TObject); var DataSource:String; begin DataSource := '你電腦的OLAP Server DataSource'; ADOQuery1.Close ; ADOQuery1.ConnectionString := ''; ADOQuery1.SQL.Clear ; ADOQuery1.SQL.Text := Memo1.Text; ADOQuery1.ConnectionString := DataSource; ADOQuery1.Open ; end; 這個方式不知你能不能接受; 然後想請教一下qq_911228兄,不知你在取出OLAP資料出來後, 如果是有2個維度以上的資料時,不知你是如何處理它階層的關係? ~做中學,學中做~
------
corn
系統時間:2024-07-27 22:57:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!