オラクルデータベーステーブルからある値を持っているデータ(年齢25才以上)をある一定件数フェッチしてとってこようとしてます。。クエリを使い、SQL.ADDのなかで、オラクルのFETCH関数を使っているますが、思い通りにいきません。DELPHI5以降で、上記のようなfetch処理をした人はいらっしゃいますか?
もしいましたら、情報をいただけませんか?
Fetchは知りませんが、
SQL.Add('Select *');
SQL.Add(' From テーブル名');
SQL.Add(' where 年齢 >= 25');
の様なSQLで発行すれば対応レコードを取り込めます。
どのようにしたいかをもっと詳しく説明していただけませんでしょうか?
>オラクルのFETCH関数を使っているますが、思い通りにいきません。
試したソースコードを書いてみるのは
いかがですか?
あと、期待する結果と実際に表示する結果なども。
>一定件数フェッチ
SELECT * FROM Table WHERE 年齢 >= 25
FETCH FIRST 20 ROWS ONLY
こういうことですか?
25歳以上が100件あるとして,そのうち20件を取得します。
ありがとうございます。Ruさん、ちなみにデータの頭から20件ではなく、ランダムに20件とる方法ってありますか?
たぶんないと思いますが,SQLのFETCH構文を調べてください。
あとはプログラムで強引にするぐらい?
TClientDataSetを使用してRecNoプロパティがレコード位置になりますので,
Random関数を用いてRECNOと一致した物を拾うルーチンを20回するとか?
自分なら以下でトライしてみます
query1.sql.text := 'select count(*) from テ−ブル名;';
query1.open;
i2 := query1.fieldbyname(count(*))・asineger;
query1.close;
query1.sql.text := 'select * from テ−ブル名';
query1.open;
i :=1;
while 1 = i do begin
s := query1.fieldbyname('フィ−ルド名').asstring;
memo1.lines.add(query1.fieldbyname('フィ−ルド名').assring);
query1.next;
if s = query1.fieldbyname('フィ−ルド名').asstring then
i:= 0;
end;
i2 :=0
while 20 > i2 do begin
memo1.lines[randam(i2)];
i2:= i2 +1;
end;
携帯から打ったのでスペルミス、エラ−等あるかもしれません。
ミスってたらゴメンナサイ;
あとスペル解らなかったので書いてありませんがランダマイズをする必要があります。
ミスです。すいません。
memo1lines[randam(i2)];
↓
memo2.lines.add(memo1.lines[randam(i2)]);
です。
結果を出力するのを忘れてました^^;
致命的ミス書いてました汗
i3 := 0;
while 20 > i3 do begin
memo2.lines.add(memo1.lines[i2]);
i3 := i3 + 1;
end;
です。
i2とi3を混同して書いてました
更にrandamじゃなくてrandomでした。汗
上記のだと結果がだぶってしまいますね
しかもまたミスってます。
何度もすいません^^;
i3 := 0;
while 20 > i3 do begin
s2 := memo1.lines[random(i2)];
if -1 = memo2.lines.indexof(s2) then begin
memo2.lines.add(s2);
i3 := i3 + 1;
end;
end;
一応見直しましたが
携帯から書いてるので、もしかしたらまたミスってるかもしれません。
しかも試してないので自信ありません。
一応よく書く方法なので、
多分大丈夫だと思うのですが・・・
参考になりました。ありがとうございました。
ツイート | ![]() |