2012-01-07 112 views
0

我想排序的記錄(降序),並顯示在網格中通過數據源連接到數據集的數據Vw_EmpVacations 這裏是代碼,請告訴我我做錯了什麼 由這樣,視圖排序降序根據起始日期,當我在數據庫中執行它delphi排序降

Vw_EmpVacations.Active:=false; 
Vw_EmpVacations.SQL.Text:='select * from Vw_EmpVacations where Branch_ID=:x and emp_id=:y and vac_id=:z order by Start_Date Desc '; 
Vw_EmpVacations.Parameters[0].Value:=branch_ID; 
Vw_EmpVacations.Parameters[1].Value:=emp_Id; 
Vw_EmpVacations.Parameters[2].Value:=Vac_ID; 
Vw_EmpVacations.Active:=true; 

謝謝

+2

所以,你想按降序對降序排序的行進行排序?我很抱歉,我認爲你需要在你的問題上多做一點工作。正確格式化代碼,告訴我們你正在使用的數據庫組件,dbGo,dbExpress,IBO,FIBPlus ...? – Wodzu 2012-01-07 17:49:44

+0

數據在視圖中排序,但是當我嘗試在網格中顯示它時,它不再被排序。我正在使用ADOquery,XDBgrid,XQRgrid – Amanda 2012-01-07 17:56:14

+0

嘗試先將它連接到標準的Delphi TDBGrid,它是否在這個組件中排序? – Wodzu 2012-01-07 17:59:46

回答

0

我會盡力幫助你,儘管事實是,你在你的問題的細節非常稀疏; - )

請創建一個新的VCL Forms應用程序 - Delphi For Win32項目。 然後,該代碼替換項目的來源:

program SortTest; 

uses 
    Forms, ADODB, DB, DBGrids; 

var 
    qrySortTest: TADOQuery; 
    conSQL2005: TADOConnection; 
    dsSortTest: TDataSource; 
    grdTest: TDBGrid; 
    MainForm: TForm; 
begin 

    Application.Initialize; 

    conSQL2005 := TADOConnection.Create(Application); 
    with conSQL2005 do 
    begin 
    Name := 'conSQL2005'; 
    //Do not forget to change the connection string 
    ConnectionString := 
     'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' + 
     'fo=False;Data Source=WODZU-LAPTOP\SQL2005S'; 
    LoginPrompt := False; 
    Provider := 'SQLOLEDB.1'; 
    Connected := True; 
    end; 

    qrySortTest := TADOQuery.Create(Application); 
    with qrySortTest do 
    begin 
    Name := 'qrySortTest'; 
    Connection := conSQL2005; 
    CursorType := ctStatic; 
    SQL.Clear; 
    SQL.Add('SELECT '#39'Kowalsky'#39' as Surname, 25 as Age'); 
    SQL.Add('UNION'); 
    SQL.Add('SELECT '#39'Smith'#39', 38'); 
    SQL.Add('UNION'); 
    SQL.Add('SELECT '#39'Jensen'#39', 11'); 
    SQL.Add('UNION'); 
    SQL.Add('SELECT '#39'Doe'#39', 26'); 
    SQL.Add('UNION'); 
    SQL.Add('SELECT '#39'Clarke'#39', 45'); 
    SQL.Add('ORDER BY AGE DESC'); 
    Active := True; 
    end; 

    dsSortTest := TDataSource.Create(Application); 
    with dsSortTest do 
    begin 
    Name := 'dsSortTest'; 
    DataSet := qrySortTest; 
    end; 

    MainForm := TForm.Create(Application); 
    MainForm.Position := poScreenCenter; 

    grdTest := TDBGrid.Create(Application); 

    with grdTest do 
    begin 
    Name := 'grdTest'; 
    Parent := MainForm; 
    Left := 8; 
    Top := 8; 
    Width := 320; 
    Height := 120; 
    DataSource := dsSortTest; 
    TabOrder := 0; 
    end; 


    MainForm.ShowModal; 

    Application.Run; 
end. 

記得把正確的連接字符串到您的SQL Server,否則將無法正常工作。 運行測試,它是否顯示按Age列降序排列的行?如果是,那麼這是你開始的地方。

將qrySortTest.SQL替換爲您的無參數查詢並檢查它是否有效。如果沒有,那麼問題在於你的查詢不在組件設置中。

希望這會有所幫助。

+0

感謝您的幫助,我會嘗試並讓您知道 – Amanda 2012-01-07 19:51:00

+0

我正在使用Delphi6,我試過New-> Others - >但沒有VCL Form應用程序。該怎麼辦 ? – Amanda 2012-01-08 07:16:08

+0

你只需要創建一個新的VCL項目,我不記得在Delphi 6中該選項的確切名稱。我爲你創建了項目文件,從這裏下載它:http://www.speedyshare.com/文件/ xShfp/SortTest.dpr – Wodzu 2012-01-08 10:01:28