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

關於更新排序

答題得分者是:eaglewolf
delphi
初階會員


發表:52
回覆:64
積分:38
註冊:2002-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-11 22:13:00 IP:125.227.xxx.xxx 訂閱
各位大大
小弟有個排序上面的問題
NO
1
2
3
4
5
6
我選擇3時會從3開始重新排序
NO
1-->5
2-->6
3-->1
4-->2
5-->3
6-->4
請問大大要如何把原本的1跟2重新排序為5跟6
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-12 01:37:33 IP:211.22.xxx.xxx 未訂閱
陣列嗎?

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TNumbers=array[1..6] of integer;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ChangeArrayOrder(var aArray:TNumbers;FromPos:integer);
var
Lo,Hi,Offset,Temp:integer;
TempNumbers:TNumbers;
begin
Lo := Low(aArray);
Hi := High(aArray);
if ( FromPos > Hi ) or ( FromPos < Lo ) then
exit;
Windows.CopyMemory(@TempNumbers,@aArray,sizeof(aArray));
Temp := Lo;
for Offset := FromPos to Hi do
begin
aArray[Offset] := TempNumbers[Temp];
Inc(Temp);
end;
for Offset := Lo to FromPos - 1 do
begin
aArray[Offset] := TempNumbers[Temp];
Inc(Temp);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Again,Count,Index:integer;
SomeNumbers:TNumbers;
begin
Self.Memo1.Lines.Add('the original value in the array is:');
for Again := Low(SomeNumbers) to High(SomeNumbers) do
begin
SomeNumbers[Again] := Again;
Self.Memo1.Lines.Add(IntToStr(SomeNumbers[Again]));
end;
for Count := Low(SomeNumbers) to High(SomeNumbers) do
begin
for Again := Low(SomeNumbers) to High(SomeNumbers) do
SomeNumbers[Again] := Again;
Self.Memo1.Lines.Add('Now change index order to ' IntToStr(Count) ', and the value in the array is:');
ChangeArrayOrder(SomeNumbers,Count);
for Index := Low(SomeNumbers) to High(SomeNumbers) do
Self.Memo1.Lines.Add(IntToStr(SomeNumbers[Index]));
end;
for Count := High(SomeNumbers) downto Low(SomeNumbers) do
begin
for Again := High(SomeNumbers) downto Low(SomeNumbers) do
SomeNumbers[Again] := Again;
Self.Memo1.Lines.Add('Now backward, change index order to ' IntToStr(Count) ', and the value in the array is:');
ChangeArrayOrder(SomeNumbers,Count);
for Index := Low(SomeNumbers) to High(SomeNumbers) do
Self.Memo1.Lines.Add(IntToStr(SomeNumbers[Index]));
end;

end;
end.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-12 08:22:13 IP:219.87.xxx.xxx 未訂閱
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
NO: array[1..6] of Integer;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
Memo1.Clear;
Edit1.Text:='';
for i:=1 to 6 do // 設定每個索引值
NO[i]:=i;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
// 從 Edit1.Text 設定值開始重新排序
for i:=1 to 6 do
begin
NO[i]:= ( i 6 - StrToInt(Edit1.Text) ) mod 7; // 重點是用 MOD 重新去計算
Memo1.Lines.Add(IntToStr(NO[i]));
end;
end;
end.
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
delphi
初階會員


發表:52
回覆:64
積分:38
註冊:2002-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-12 09:09:25 IP:219.84.xxx.xxx 訂閱
謝謝大大的解答
但小弟還是有點不理解
1.NO會隨的資料量的不同而增多或減少array要怎麼宣告
2.我想要做的是在edit理面填入值他就會從填入的排序在資料庫查出然後
從那筆開始為1一直排序下去,程式碼如下
SELECT * FROM 1234
WHERE NO >='3'
iSN := 0;
while not EOF do
begin
Inc(iSN);
Edit;
FieldByName('NO').AsInteger := iSN;
Post;
Next;
end;
假設這序號有10筆
這樣子寫3以後的都會更改為1 2 3 4 5 6 7 8
但是前面的1跟2就會沒改到
就會變成有兩個1跟2
我要如何讓原本的1變成9,2變成10
謝謝
delphi
初階會員


發表:52
回覆:64
積分:38
註冊:2002-05-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-12 09:09:59 IP:219.84.xxx.xxx 訂閱
謝謝大大的解答
但小弟還是有點不理解
1.NO會隨的資料量的不同而增多或減少array要怎麼宣告
2.我想要做的是在edit理面填入值他就會從填入的排序在資料庫查出然後
從那筆開始為1一直排序下去,程式碼如下
SELECT * FROM 1234
WHERE NO >='3'
iSN := 0;
while not EOF do
begin
Inc(iSN);
Edit;
FieldByName('NO').AsInteger := iSN;
Post;
Next;
end;
假設這序號有10筆
這樣子寫3以後的都會更改為1 2 3 4 5 6 7 8
但是前面的1跟2就會沒改到
就會變成有兩個1跟2
我要如何讓原本的1變成9,2變成10
謝謝
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-12-12 09:34:41 IP:211.75.xxx.xxx 未訂閱
SQL Command 改成 Select * From Table Order By No
iSN := RecordCount - StrToInt(edit1.Text);
while not EOF do
begin
Inc(iSN);
Edit;
FieldByName('NO').AsInteger := (iSN mod RecordCount ) 1 ;
Post;
Next;
end;
------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
delphi
初階會員


發表:52
回覆:64
積分:38
註冊:2002-05-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-12-12 09:53:38 IP:219.84.xxx.xxx 訂閱
謝謝大大~~
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-12-12 15:07:30 IP:210.65.xxx.xxx 未訂閱
雖已結案,仍然忍不住差一下花!
從另一方面去思考,直接改SQL Command:
select 1 as seq,t.* from table1 t where t.id >= 3
union all
select 2 as seq,t.* from table1 t where t.id < 3
order by
seq,
no




Fishman
------
Fishman
delphi
初階會員


發表:52
回覆:64
積分:38
註冊:2002-05-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-12-13 10:00:36 IP:125.227.xxx.xxx 訂閱
謝謝大大這sql下的好~~又學到一招~~
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2006-12-13 19:35:08 IP:211.76.xxx.xxx 未訂閱
Fishman 不錯喔!真的是好久不見..有空來泡茶喔
系統時間:2024-05-19 18:32:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!