SQL中的OLAP 問題 |
尚未結案
|
qq_911228
一般會員 發表:30 回覆:22 積分:10 註冊:2003-09-29 發送簡訊給我 |
以下是我程式碼的部份
我這個程式是要用到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 發送簡訊給我 |
這個部份剛好跟我們專題有點關係,所以昨天跟我們老師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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |