• ベストアンサー

データの取得をしたいのですが…

簡単にプログラムを書きます。 A.cpp ファイルの記述 //テーブルの作成 typedf strct _TABLE { char *psAData; char *psBData; } TABLE, *PTABLE TABLE A [2] = { {"+1", "2"}, {"-1", "5"} }; //b.cppファイルから読み出される関数 void GetData(int nRow, char *psA, char *psB) { PTABLE pTable; ptable = A; *psA = *pTable[nRow].psAData; *psB = *pTable[nRow].psBData; } b.cpp ファイルの記述 void __fastcall TForm::FormCreat(TObject *Sender) { char sA; char sB; AnsiString asData; for(int nRow = 0; nRow < 2; nRow++) { //a.cppファイルのAテーブルの //一行目の二つのデータを取得させたい GetData(nRow, &sa, &sB); //取得したデータを他のコンポーネントに格納 asData.sprintf("%s Aデータ", sA); Edit1->Text = asData; asData.sprintf("%s Bデータ", sB); Edit2->Text = asData; } } 上記のような感じの(本当はもっとテーブルの数などおおいのですが)プログラムでb.cppファイルからa.cppファイルのテーブルのデータを取りたいと思っています。 ソースを見て、なんとなくしたいことを分っていただけると良いのですが…。 回りくどいようですが、テーブルのデータを他のプロジェクトからも取得したりしたいのでb.cppファイルに直接テーブルを書く、などの方法ではなく、このようにデータを取りたいと思っています。 プログラムを実行するとエラーが出てデータの取得が出来ずに困っています。 どこを直したら良いかご指導よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 405
  • ベストアンサー率50% (17/34)
回答No.3

ざっと見た限りで自身はありませんが、どうもポインターの使い方に誤りがありそうです。 void GetData(int nRow, char *psA, char *psB) の宣言を void GetData(int nRow, char **psA, char **psB) に変更 *psA = *pTable[nRow].psAData; *psB = *pTable[nRow].psBData; を *psA = pTable[nRow].psAData; *psB = pTable[nRow].psBData; に変更 void __fastcall TForm::FormCreat(TObject *Sender)の中の char sA; char sB; を char *sA; char *sB; に変更 これで試して見て下さい。

Caya
質問者

お礼

アドバイスありがとうございます! さっそく参考にさせていただいて修正して実行し、 思うようにデータの取得ができました! ポインタを謝った使い方をしていたのですね^^; ざっとご覧になられただけでしっかりと修正が出来てしまわれるなんて凄いですね!私もしっかり勉強していかなくては!と思いました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#15691
noname#15691
回答No.2

//テーブルの作成 typedef struct _TABLE { char *psAData; char *psBData; } TABLE, *PTABLE; TABLE A [2] = { {"+1", "2"}, {"-1", "5"} }; //b.cppファイルから読み出される関数 void GetData(int nRow, AnsiString *psA, AnsiString *psB) { PTABLE pTable; pTable = A; *psA = pTable[nRow].psAData; *psB = pTable[nRow].psBData; } b.cpp ファイルの記述 void __fastcall TForm::FormCreat(TObject *Sender) { AnsiString sA; AnsiString sB; AnsiString asData; for(int nRow = 0; nRow < 2; nRow++) { //a.cppファイルのAテーブルの //一行目の二つのデータを取得させたい GetData(nRow, &sA, &sB); //取得したデータを他のコンポーネントに格納 asData.sprintf("%s Aデータ", sA); Edit1->Text = asData; asData.sprintf("%s Bデータ", sB); Edit2->Text = asData; } }

Caya
質問者

お礼

回答ありがとうございます! AnsiString型でデータをとるのですね! 参考になりました! テーブルがcharなので、charでとるものだとばかり思っていました^^;

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

構造体の定義をヘッダファイルに追い出して、(A.h) 実体はそのままA.cppファイルに残して、 A.cpp B.cpp双方で、A.hを#includeしてください。

Caya
質問者

お礼

回答ありがとうございます。 参考にさせていただいて、作ってみたのですが、やはり同じエラーが出てしまいます。 エラーはAccess violation at address 3266729D in module "CC3260MT.DLL" Read of address 0000002D というものなのですが…

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • データの取得方法

    Aテーブル{ id char(3) not null, name varchar(10), a_no char(5), b_no char(5), c_no char(5), date timestamp } Bマスタ{ no char(5), name char(10) } 上記のようなDBがあるのですがAテーブルのa_no、b_no、c_noに入るのはBマスタのnoになります。 下記のようにデータを取得したい場合、どうすればうまく取得できるのでしょうか。 A.id, A.name, A.a_no, カラム名をname1としてB.name, b_no, カラム名をname2としてB.name, c_no, カラム名をname3としてB.name そんなに難しいことではないと思うのですが、考えれば考えるだけ頭の中でこんがらがってきて困っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • データ型だけを取得したい

    あるテーブルから、CREATE TABLE使用時に設定したデータ型のみを取得する方法を教えてください。 たとえば、「INT,TEXT,CHAR...」など。 最終的にはPHPで配列として取得したいのです。

    • ベストアンサー
    • MySQL
  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • 1つのテーブルからのデータ取得

    お世話になります。 Table1にはA,Bのフィールドがあり 例えば A=01のレコードを取得(取得するフィールドはA,B) このレコードを(1)とする。 Table1のうち、Aが(1)のBと一致する レコードを(2)とする。 Table1のうち、Aが(2)のBと一致する レコードを(3)とする。 N番目のBと一致するTable1のAがなくなるまで 上記を繰り返す。 (1),(2),(3)・・・の A,Bの値を取得するためには どういうSQL文を書けばいいでしょうか? 例:ここでA=01を設定する テーブル例と結果 Table1 A: B 01:02 取得 02:04 取得 02:05 取得 03:04 X 04:06 取得 05:10 取得 07:11 X 10:15 取得 以上お教えください。よろしくお願いします。

  • 複数のテーブルからのデータ取得と連結

    いつもお世話になっております。 JavaでDBからデータを取得するプログラムを作成中です。 単純なものは問題無いのですが、 複数のテーブルからデータを取得し、そのデータを連結させるプログラムを作りたいのですがわからず困っています。 テーブル1 コードA(Key)       名称A テーブル2 コードB(Key)       名称B テーブル3 コードA(Key)       コードB(Key)       コードC(Key)       名称C となっており、取得したデータを 名称A+名称B+名称C と表示したいのですが、どのような処理を行えばよいのでしょうか? ちなみに複数のレコードを操作するプログラムも作ったことが無いレベルです。 どなたかご教授お願いします。

    • ベストアンサー
    • Java
  • javaにてデータ取得

    JAVAカテゴリーで質問しようかこちらにしようか迷ったのですが。。。 あるテーブルを以下の様に内部結合しています。 select * from t_table a, t_table b where a.id=b.id and a.no=0 and b.no=1 この時、t_tableのあるカラムtestcolを取得したいとおもっております。 言語はjavaで、データベースはpostgreSQLです。 rs.getString("testcol"); rsはResultSetオブジェクトです。 これで、データは取得できるのですが、条件のt_tableの別名aのデータ が取得されます。別名bの方を取得したいと思い、単純に rs.getString("b.testcol"); 等としたら、「カラム名がありません」というエラーになりました。 getStringのパラメータとして、カラムインデックス(数値)も 指定できるので、それで行うと取得可能でした。 カラムインデックス指定ですと、プログラムのメンテナンス上支障をきたす ので、なんとか、カラム名の指定で行いたいと思っておりますが、 どうすればいいのでしょうか?

  • テーブルの列名をデータとして設定しておき取得する

    テーブルが2つあるとします。 テーブルAにはテーブルBの列名がデータとして登録されてます。 テーブルBには値が格納されてます。 テーブルA Key  field1  field2  field3 ------------------------------ 1   item2  item3  item5 2   item1  item2  item5 ------------------------------ テーブルB Key  item1  item2  item3  item4  item5 -------------------------------------------- 1    101   205    350   420   510 2    111   112    113   114   115 -------------------------------------------- ここでテーブルAとテーブルBへキーを指定して、 テーブルAのfield1~field3に登録されたすべての列名を元にテーブルBから値を取得したいです。 例として キー1を指定して取得すると 205,350,510 が取れます (item2,item3,item5の列名をテーブルAで指定した為) キー2を指定して取得すると 111,112,115 が取れます キーをパラメータとして与え、 できれば2つのテーブルを結合し、1回のSQLで取得する方法はありますでしょうか? (1回のSQLでなくても簡易であれば良いですが) よろしくお願い致します。

  • Accsess テーブルを参照して別のテーブルにデータを取得する方法を教えてください

    初めて質問します。 アクセスでデータベースを作成しようと悪戦苦闘中です。 <質問> 元データとなる住所録テーブルAがあります。 テーブルBにテーブルAの情報+αのデータをフォームを使って入力したいのです。 (1)テーブルAにはコードがあり、テーブルBに入力する際に、そのコードを入力するとテーブルAからデータを取得でき、テーブルBにコピーとして取得したいです。 (2)また同じコードが複数ある場合は、別ウィンドウを 開きそこから選択してテーブルBにコピーしたいです。 (1)と(2)では方法が違うと思うのですが、どちらの場合も教えて頂けないでしょうか? DLookup関数を使うのでしょうか・・・? よろしくお願いします。

  • 画像データの取得と格納

    原因がなにかわからず困っています。 アドバイスをください。 やりたいことは -------------------------------------------------- (1)一時保管用のテーブル内から画像データをPHPにて表示。 (2)その後、他のテーブルに画像ファイルを格納。 -------------------------------------------------- (1)は取得できていて表示も可能。 ただ、それをAテーブルに格納すると画像データが壊れているのか×マークで表示され画像が表示できない。 プロパティで表示したときの画像パスから直接画像を表示しても表示できず。 phpMyAdmin上で画像ファイルを差し替えると表示可能。 以上のことからデータの内容が破損と思われる。 Aテーブルに格納する際、$temp_dataのバイナリを取得したものをそのまま放り込んでいますがこれがいけないのでしょうか? バイナリ以外のデータは正常に格納できています。 問題の画像データはJPEGで 取得・格納のデータ型はlongblob型。 mysql 5.0.67 php 5.2.6 Linux RedHat 2.6.9-78.ELsmp 本当に困っています。 よろしくお願いします。

    • 締切済み
    • PHP
  • 同一テーブルから複数件のデータを取得して1データとしてみたい

    こんにちは。 現在、以下の構成のテーブルから 複数件のデータを取得して1つのデータとして 参照したいと思っているのですがどうやって よいものかわかりません。 申し訳ありませんがご教授ください。 --------------------- テーブルsample --------------------- 項目A key 項目B key 項目C key 項目D 項目E --------------------- 取得したいデータは以下の通りで 同一の項目A,B,Cでグルーピングして 項目D,Eが存在する分だけ取得したいと思っております。 ----------------------------------------------- 項目A,項目B,項目C,項目D,項目E,項目D,項目E,..... -----------------------------------------------