DELPHI6を使っております。素人です。
以下のようなプログラムを書きたいと思っておりますが、
参考書やネットで調べても以下の作業ができません。

SQLテーブルに
a_tbl
というテーブルをつくり、
a_id varchar2 (一意)
a_namae varchar2
a_kubun varchar2
という項目を作りました。

delphiでは、editboxを設置して、それぞれ
edit1, edit2, edit3という名前をつけました。
また、ボタン1、2を設置しました。


行いたい作業は以下です。

・edit1に値を入力し、ボタン1をクリックする

・「a_id」に格納されている値と、「edit1」に入力した文字とが一致するところの「a_namae」を「edit2」に、「a_kubun」を「edit3」に表示させる
・edit3に表示した文字を変えて、ボタンをクリックすると「a_kubun」が
上書きされる

・「a_id」に格納されている値と、「edit1」に入力した文字とが一致する
ものがない場合、edit2と3に入力してボタン2をクリックすることで
新規に「a_tbl」にレコードが記入される


教えてください!

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#1、#2です。

試行は上手くいったでしょうか?
駄目ならば具体的にその状況を補足するか、新しく質問してください。既に新たな質問を投稿しているならば、それへのリンクを補足してください。
    • good
    • 0
この回答へのお礼

できました!
ありがとうございました!

お礼日時:2009/06/17 23:30

現在MDB(MS-Access)でしか試すことができないので



1.フォームに
TADOConnection,TADODataSet,TDataSource,TDBEdit二つ,TEdit,TButton
を貼り付ける

2.ADOConnection1.ConnectionStringを
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\data\delphi\Utils\test\SampleData.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System
のようにする。「C:\data\delphi\Utils\test\SampleData.mdb」この部分は適切に変更すること

3.ADODataSet1.ConnectionをADOConnection1にする

4.DataSource1.DataSetをADODataSet1にする

5.DBEdit1/2.DataSourceをDataSource1にする

6.DBEdit1/2.DataFieldを'a_name'/'a_kubun'にする

7.以上の操作は、コードを直接書くのではなく、プロパティエディタを使用する

8.Button1のクリックイベントに以下のコードを書く
procedure TForm1.Button1Click(Sender: TObject);
begin
ADODataSet1.Locate('a_id',Edit1.Text,[]);
end;

これでEdit1にidを入れてボタンを押すと'a_name'と'a_kubun'が変化します。
「DELPHIでSQLテーブルを読み込み・」の回答画像2
    • good
    • 0
この回答へのお礼

丁寧に教えてくださいありがとうございます!
試してみます!

お礼日時:2009/05/18 04:50

通常Delphiでデータベースを操作するときは


TAdoDataSet,TDataSource,TDBEdit,TDBNavigator
などを使用します。これらを利用すれば、ほとんどコードを書かずに済みます。TEditなどを利用すると、かなり面倒なことになるのですが、それなりに理由があるのでしょうか?
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。
そうなんですね。
dbtoolsを使えばどうやってできるのでしょうか?
・・・本当に素人なので、教えていただけるとうれしいです。

お礼日時:2009/05/17 20:29

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDelphiでキー入力を投げたい

ゲームコントローラに対応していないソフトウェアを、コントローラに対応させるべくプログラムを組んでいます。
Delphiのプログラムでコントローラからの入力を受け取り、該当するウインドウにメッセージを送信すればこの仕組みが実現できると考えたのです。

まず、以下の関数を記述しました。

function CallBackTest(WH: HWND; LP: LParam): BOOL stdcall;
var
Buff: array [0..255] of Char;
begin
if IsWindowVisible(WH) then
if GetWindowText(WH, Buff, 255) <> 0 then
TListBox(LP).Items.AddObject(Buff, Pointer(WH));
Result := True;
end;

次に、ListBoxを用意して、以下を実行しました。
EnumWindows(@CallBackTest, Longint(ListBox1));
ListBoxには実行中のウインドウタイトルが表示されます。そこで、目的のウインドウ名を選択して

for i := 0 to (ListBox1.Items.Count - 1) do
if ListBox1.Selected[i] then
PostMessage(hwnd(listbox1.Items[i]), WM_KEYDOWN, 入力キー名, 0);
end;

こんな感じで投げられるかな?と思ったのですが、悲しいほど無反応。
なにか根本的にやり方を間違えているのでしょうか・・・?

ゲームコントローラに対応していないソフトウェアを、コントローラに対応させるべくプログラムを組んでいます。
Delphiのプログラムでコントローラからの入力を受け取り、該当するウインドウにメッセージを送信すればこの仕組みが実現できると考えたのです。

まず、以下の関数を記述しました。

function CallBackTest(WH: HWND; LP: LParam): BOOL stdcall;
var
Buff: array [0..255] of Char;
begin
if IsWindowVisible(WH) then
if GetWindowText(WH, Buff, 255) <> 0 then
TListBox...続きを読む

Aベストアンサー

コードを試しました。WindowハンドルをAddObjectで記憶していますので下記は修正しました。

【修正前】PostMessage(hwnd(listbox1.Items[i]), WM_KEYDOWN, 入力キー名, 0);
【修正後】PostMessage(hwnd(listbox1.Items.Objects[i]), WM_KEYDOWN, {入力キー名} 48, 0);

この修正を加えたら、秀丸エディタには文字0を入力できました。しかし、メモ帳やワードパッドには入力できませんでした。

ウィンドウとメッセージについて調べて試す必要があると思います。EnumWindowsはトップレベルのウィンドウしか探しません。目的のアプリケーションがトップレベルのウィンドウにWM_KEYDOWNを送って反応するものかどうか。子ウィンドウあるいは別のメッセージにしたらどうか、フォーカスをあてたらどうか、など。

Q[delphi] 変数を利用してコンポーネント名指定したいのですが、可能でしょうか?

表題の件、どなたか教えてください。
「可能」か「不可能」かの情報や代替案でもありがたいです。

※delphi6 enterprise版を使用しています。

質問
コンポーネント名の指定に変数は使えるのでしょうか?
例えば、labelコンポーネントを複数設置しそのlabel名の末尾を数字にする(label1,2,3・・・)。何かの処理の際に、for文で変数を送り(i=1,2,3・・・)、label名+変数.captionなどという形で指定することはできるでしょうか?


ラベル名 label1 label2 label3 を設置

ボタンクリック時などに、
var
i : integer;

for i := 1 to 3 do
begin
  label(i).caption := inttostr(i) ;
end;

よろしくお願いします。

Aベストアンサー

そのような目的にはFindComponentが使えます。

for i := 1 to 3 do
begin
TLabel(FindComponent('Label'+InttoStr(i))).Caption:=InttoStr(i);
end;

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

QDephiでのTextボックスでの数値入力

 Delphi初心者です。判らないことは、テキストボックスの様に数値を入力するコントロールが何かということです。
 たとえばMsAccessのフォームで、TEXTBOXを使って数値入力をすることができますが、Delphiの場合はどんなコントロールを使用すれば、数値を入力できるのでしょうか?それとも、テキストボックスの入力を数値変換して使用するか手はないでしょうか?知っている方にしてみると、未熟な質問だと思いますが、よろしくお願いします。

Aベストアンサー

型キャストすれば良いのです。

StrToInt で キャストして IntToStr で戻すとか。
浮動小数点値なら StrToFloat など。

Delphi6以降で整数なら TryStrToInt が使えます。

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
 if TryStrToInt(Edit1.Text,i) then begin
   i := i * 10;
   Edit2.Text := IntToStr(i);
 end;
end;

QDelphiでの関数の戻り値を別の型で複数に。

 どうお過ごしですか、ご主人様?
少し困っている事があるんですぅー。

Delphiで関数の戻り値を別の型で、複数にしたいのですが、どうしたらいいのでしょうか?
そもそもこういう場合は別の関数に分けた方がいいのでしょうか?
内容は数十行しかなく、まとめたい処理なんです。

グローバル変数は、なんかかっこ悪いので使いたくないし、クラスはまだよく分からないし。
あ、でもでも、普通は関数を分けるんでしょうか?
よろしくお願いします。

Aベストアンサー

変数引数(var宣言つきの引数)を使って、値を戻しては。
レコード型で返すという手もあります。

参考URL:http://info.borland.com/techpubs/delphi/delphi5/oplg/procfunc.html#7744

Qdelphiにて 文字列の最後の改行を取り除く

S :=TStringList.Create;
で読みこんだテキスト S.Textの文字列の末尾に一個もしくは複数個の改行#13#10があった場合に取り除きたいのですが、
その方法がいまいちよくわかりません。

ずばり方法、アドバイス、tipsのサイトなど、
教えていただけないでしょうか?

Aベストアンサー

こんにちは、honiyonです。

 すいません、質問を見落としていました。
 そうしますと、以下のような処理になるでしょうか。

function HOGE(S:string):string;
var
i : integer;
begin
for i:=length(S) downto 1 do begin
if not (S[i] in [#13,#10]) then break;
end;
Result := LeftStr(S, i);
end;

テストしていないので不具合あるかも知れませんが、だいたいこんな感じだと思います。

QBDE初期化中にエラーが発生しました。$210D

Borland Database Engine 初期化中にエラーが発生しました。($210D)
と表示されます。どう対処すれば良いでしょうか?

Aベストアンサー

【対処方法】
1.全てのBDEアプリケーションをクローズします。
2.BDE Administrator(BDEADMIN.EXE)を実行します。(普通は、Program Files\Borland...の中にいます)
3.BDE Administratorの「環境設定」タブを開き、左ウインドウのツリーより「SYSTEM」をクリックします。さらに、「INIT」をクリックします。
4.右ウインドウの「INIT」の定義の中に、「SHAREDMEMLOCATON」項目がありますので、この値を5BDEに変更します。
5.左ウインドウのツリーの「SYSTEM」を右クリックし、ポップアップメニューより、「更新」を選択します。
6.BDE Administratorを終了します。

以上で解決すると思います。
尚、私の場合は、DELPHI4のBDEアプリケーションを、Windows7で使用した場合、BDEアプリケーションを複数同時起動した場合に発生する場合がありました。
予断ですが、Windows7の場合、BDE Administrator(BDEADMIN.EXE)は、管理者権限で実行する必要がありますので、気をつけてください。

以上

【対処方法】
1.全てのBDEアプリケーションをクローズします。
2.BDE Administrator(BDEADMIN.EXE)を実行します。(普通は、Program Files\Borland...の中にいます)
3.BDE Administratorの「環境設定」タブを開き、左ウインドウのツリーより「SYSTEM」をクリックします。さらに、「INIT」をクリックします。
4.右ウインドウの「INIT」の定義の中に、「SHAREDMEMLOCATON」項目がありますので、この値を5BDEに変更します。
5.左ウインドウのツリーの「SYSTEM」を右クリックし、ポップアップメニューより...続きを読む


人気Q&Aランキング

おすすめ情報