掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
乱数を振り当てランダムにある一定数のデータを取得するには? (ID:36664)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず1点 GTRさんも書いておられますが、数値型・文字列型のどちらでしょうか? テーブルの設計書を見ればすぐに判ると思います。 そして、SQLPlusで Select Trunc(dbms_random.value*1000) as rand from TABLE1 where rownum <= 30 を実行した結果は、Table1に登録しているレコードのIDに必ず有りますか? ここに無ければ30件の選択結果はありません。0件にもなるでしょう。 必ず30件必要ならば、存在するIDを30件用意しないといけません。 更新の件ですが、この場合、 DBGrid2のDatasorceがdatasource2で、datasource2のDatasetがquery2になります。 with DBGrid2 do for I := 0 to SelectedRows.Count - 1 do //SelectedRowsはDBGrid2のプロパティ begin Datasorce.Dataset.GotoBookmark(pointer(SelectedRows.Items[I])); //ちょっと違っていました。 //DBGrid2のDatasetに対するFlgを立てる処理 //DBGrid2.SelectedRows.CurrentRowSelected := false; //選択状態を外す end; //DBGrid2のDatasorceがdatasource2で、datasource2のDatasetがquery2の場合、 //query2は開いているとする。この場合は、別のTQueryを使っています。この方が判りやすいです。 //ただ、query2は再度 with Query1 do beign Close; whth SQL do begin Clear; Add('Update Table1'); Add('Set FLAG = ''1'''); Add('Where ID = ' + Datasorce.Dataset.FieldByName('ID').AsString); //この場合は、SQL文にするためにAsStringを使っています。 //SQL文はテキストですから。 //Parameterにすると、Oracle側のフィールドの型に対応しなければいけません。 end; ExecSQL; end; また、テーブルを編集する別の方法は、TUpdateSQLを使用します。 TUpdateSQLをフォームに置きます。これをUpdateSQL1とします。 Query2のUpdateObjectプロパティをUpdateSQL1にします。 多分UpdateObjectプロパティをクリックすると、UpdateSQL1が表示されると思います。 UpdateSQL1をダブルクリックすると、編集内容が表示されますので、 オプションのテーブル名を選択して、テーブル項目を押すと項目を表示します。 キーでIDを選び、更新項目でFLGを選びます。 SQL文を生成で、生成すると、SQL文のUpdate,Insert,Deleteがそれぞれできあがります。 この部分は、UpdateSQL1のDeleteSQL,InsertSQL,ModifySQLでそれぞれ編集することも出来ます。 これでQuery2とUpdateSQLが連結されましたので、 with DBGrid2 do begin for I := 0 to SelectedRows.Count - 1 do //SelectedRowsはDBGrid2のプロパティ begin Datasorce.Dataset.GotoBookmark(pointer(SelectedRows.Items[I])); Datasorce.Dataset.FieldByName('FLAG').AsString := '1'; end; if Datasorce.Dataset.UpdatesPending then begin try Datasorce.Dataset.ApplyUpdates; except showmessage('更新できません。'); end; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.