Delphi7からSQLPlusにInsert,Delete,Updateするには?

解決


みなみ  2011-07-03 18:00:42  No: 40729

はじめまして。2か月前にプログラミンの勉強を始めたものです。

SQLPlusのなかにあるテーブルにInsert,Delete,Updateしたいのですが、できません。
現在Loadのみが出来ている状態です。

ちなみに
InsertSQL = 'Insert Into ATABLE ' +
 '(ID, DAY, TIME) ' +
 'Values(:ID, :DAY, :TIME)';

Procedure TForm.InsertData(ID : Integer; Day, Time : string);
begin 
 PutSQL(InserSQL, [ID, Day, Time]);
end;

SQLQuery.Open;
SQLQuery.Insert;

という感じで書いているのですが、Openすらできません。
どなたか、初心者でも分かるように、説明していただけませんか?


みなみ  2011-07-03 18:26:42  No: 40730

すみません、補足ですが、
Delphiの型からSQLPlus用の型に移す必要がありますか?
Loadするときは、
「AsInteger」や、「AsString」のようなものを記載したのですが、
DelphiからSQLplusにデータを送るときは、どのように変換すればいいのでしょうか?

初心者な質問ばかりで、お恥ずかしいですが、
アドバイスをいただけますか?


HOta  2011-07-03 18:31:20  No: 40731

DatabaseはOracleをお使いのようですね。
SQLPlusはOracleのToolだと思います。
接続は何を使っているのでしょうか?
これはうまくいっているのでしょうか?

もし、BDEを使っていて、Oracleが8.1以上だと、対応していませんので、
DBExpressを使うことをお勧めします。

もう少しバージョンやコンポーネントをお知らせください。
接続方法も書いていただくと、レスポンスもしやすいと思います。


みなみ  2011-07-03 21:41:31  No: 40732

HOtaさん

さっそくお返事をいただいて、ありがとうございます。
全くの初心者で、何をお伝えしたらいいかも分からず、すみませんでした。

DBExpressとOracle10.2を使用しています。
SQLQuery(DBExpressの)
実際にインサートする場合のシンタックス(?)を教えていただきたいです。
具体的にどのようなコードになるのでしょうか?
SQLconnectionというコンポーネントを使ってOracleデータベースに接続しています。
SQLDataSetコンポーネントをフォーム上においてを置いた途端に、LOADができるようになったのですが、
実際にどのように使っていいのか(InsertやDeleteやUpdate)をするにあたり、
どのように使用するのかも分かっていない状態です。

上記の情報で、十分に状況がつたえられているか、自信がありませんが、
ご指導の程していただければ幸いです。
ネット等で調べては見たものの、余りにも知識がなく、うまく実行できませんでしたので・・・。

いつもこのサイトを参考にしています。ありがとうございます。


HOta  2011-07-05 00:25:39  No: 40733

TSQLDataSet は単方向データセットですから、読み込む場合は、
TSQLDataSetのCommandTextに
Select Field1,Field2,Field3 From Table1 where 条件
でActive := true;
でDatasetを取り出せます。
OracleとDelphiの間の方は、String型の場合は、AsString、
整数型は、AsInteger等で取り出します。
このあたりは調べてください。
Delphiからデーターベースを更新するには、TSQLQueryを使うと、SQLにInsert Into ATABLE (ID, DAY, TIME) Values(:ID, :DAY, :TIME)
とすると、
Procedure TForm.InsertData(ID : Integer; Day, Time : string);
begin 
 with SQLQuery1 do
 begin
   ParamByName('ID').AsInteger := ID;    {パラメターに値を入れる}
   ParamByName('DAY').AsString := DAY;   {ここのFieldの型が文字列の場合}
   ParamByName('TIME').AsString := Time;
   ExecSQL;                              {更新実行}
 end;
end;
で更新できると思います。


みなみ  2011-07-07 11:40:33  No: 40734

HOtaさん

わざわざご親切に教えていただき、ありがとうございました。
教えていただいた通りにコーディングして、
DBにアクセスできるようになりました。

またご指導よろしくお願いします。
ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加