【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18783

PostgreSQLのデータを配列に格納
投稿者---AI(2004/12/17 16:00:18)


AIです。お世話になります。
今、C言語でデータベースを扱う処理を
学習しています。
データベースにアクセス及び
SQL文(SELECT *FROM ai_table)を
実行して、テーブルの行・列数共に
挿入したテーブルのデータと一致しています。
が、テーブル(ai_table)のデータを
配列に格納したいのですがどのようにしたら
いいのでしょうか?

テーブルデータは、
id(int) | name(char) | age (int) | adress(char)
------------------------------------------------
1 | ai | 20 |  大阪
2 | sai | 18 | 東京
3   | mai | 21 | 神奈川

とします。このデータ全てを配列に格納したいです。
2次元配列を用いてfor文で回して格納していくのでしょうか?

よろしくお願いします。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:PostgreSQLのデータを配列に格納 18788 επιστημη 2004/12/17 17:08:54


No.18788

Re:PostgreSQLのデータを配列に格納
投稿者---επιστημη(2004/12/17 17:08:54)


>SQL文(SELECT *FROM ai_table)を
>実行して、テーブルの行・列数共に
>挿入したテーブルのデータと一致しています。
>が、テーブル(ai_table)のデータを
>配列に格納したいのですがどのようにしたら
>いいのでしょうか?

質問。SQLの実行結果を読み出す(画面にプリント)する方法を
教えてください。それができるなら配列にも格納できるでしょう。



この投稿にコメントする

削除パスワード

No.18817

Re:PostgreSQLのデータを配列に格納
投稿者---AI(2004/12/20 09:22:12)


AIです。
画面への出力は、

<pre> PGresult *res;
  const char *table;
  int field,tuple;
  field=PQnfields(res);
  tuple=PQntuples(res);
  for(int i=0;i&lt;tuple;i++){
    for(int j=0;j&lt;field;j++){
      table=PQgetvalue(res,i,j);
    }
    printf('\n');
  }
</pre>


です。間違っているかもしれませんが・・・。

テーブルデータを1行ごとに2次元配列に格納したいです。

よろしくお願いします。





この投稿にコメントする

削除パスワード

No.18818

Re:PostgreSQLのデータを配列に格納
投稿者---επιστημη(2004/12/20 09:29:30)


>間違っているかもしれませんが・・・。
実行し確認していないのですか?

>テーブルデータを1行ごとに2次元配列に格納したいです。
できてるやないですか。

PQgetvalue(res,i,j); の値を table[i][j] にセットすればいいんでしょ?



この投稿にコメントする

削除パスワード

No.18825

Re:PostgreSQLのデータを配列に格納
投稿者---AI(2004/12/20 17:02:34)


AIです。

実際は、PQgetvalue()は、ユーザー関数getv()にしており、
戻り値はconst *char型にしています。
よって、*table。

for(int i=0;i<tuple;i++){
for(int j=0;j<field;j++){
table=getv(i,j);
table=getv(i,j);
printf("%s\n",table);
}
}
で表示はされます。しかし、
例えば、テーブルデータのidとname列データだけを取り出して、
新しいテーブルに挿入する処理が
したい場合、
配列に格納するのではないかなと思っています。
INSERT INTO文をする場合に、
SQLコマンド列に取り出したidとnameの値を
どのようにするかは問題として
残っていますが、
まずは、新しいテーブルに抽出したデータ(idとname)を格納する
にはどのようにしたらいいでしょうか?
今の段階は、新たなテーブルを作成完了しています。
また、for文中でのidとnameの表示はできています。
どうぞよろしくお願いします。





この投稿にコメントする

削除パスワード

No.18826

Re:PostgreSQLのデータを配列に格納
投稿者---επιστημη(2004/12/20 17:13:30)


>実際は、PQgetvalue()は、ユーザー関数getv()にしており、
>戻り値はconst *char型にしています。
>...
>例えば、テーブルデータのidとname列データだけを取り出して、
>新しいテーブルに挿入する処理が
>したい場合、
>配列に格納するのではないかなと思っています。

いや、なにがわからないのかわからないのです。
格納すべき値は getv() で手に入るのだから、
それを配列にセットするだけでしょう? (違うのか??)




この投稿にコメントする

削除パスワード

No.18832

Re:PostgreSQLのデータを配列に格納
投稿者---AI(2004/12/20 18:03:41)


AIです。すみません。質問悪くて&初心者で・・・。
下記で表示は出来るのですが、
配列のセットがわかりません。

SELECT文で取り出したデータを
配列に格納したいです。
34 | ai | 56 | mai

上記のようにidと名前を配列に格納したいです。
*tableは進んでいってしまうので、最終的には
最後のところに行っています。

初心者でわけのわからないことばかり言ってるかも知れませんが
よろしくお願いします。

  PGresult *res;
  const char *table;
  int field,tuple;
  field=PQnfields(res);
  tuple=PQntuples(res);
  for(int i=0;i&lt;tuple;i++){
    for(int j=0;j&lt;field;j++){
      table=PQgetvalue(res,i,j);
      printf('%s\n',table);

    }
  }




この投稿にコメントする

削除パスワード

No.18835

Re:PostgreSQLのデータを配列に格納
投稿者---RAPT(2004/12/20 21:23:41)


PQgetvalue()関数だとか、PGresult だとか言われても、仕様不明なので
回答できません。せめて、コードテスト可能なレベルまで問題を落としこんで
くれないと、回答のしようがありません。

ってことで、勝手に適当な同じ名前のオブジェクトと関数を定義してやってみた
サンプル。Windows2000sp4/VC++6.0sp6/Console-Appで動作確認済。

#include <stdio.h>
#include <string.h>

enum{ BUF_SIZE = 20 };

typedef struct PGresult_
{
    char value[BUF_SIZE][BUF_SIZE];
} PGresult;

const char *PQgetvalue(PGresult *res, int i, int j)
{
    static char buff[BUF_SIZE];
    memset(buff, 0, BUF_SIZE);
    strcpy(buff, &res->value[i][j]);
    return buff;
}

int main()
{
    PGresult result = { "test string", "test string2" };
    PGresult *res = &result;
    char copy_value[BUF_SIZE][BUF_SIZE][BUF_SIZE] = {0};
    const char *table = NULL;
    int i, j;
    for(i = 0; i < 2; i++){
        for(j = 0; j < 10; j++){
            // 一文でかけるけど分けてみた。これでコピーはできるが?
            table = PQgetvalue(res, i, j);
            strcpy(copy_value[i][j], table);
        }
    }
    for(i = 0; i < 2; i++){
        for(j = 0; j < 10; j++){
            // 出力して確認してみなされ
            printf("copy_value[%d][%d] = \'%s\'\n", i, j, copy_value[i][j]);
        }
    }

    return 0;
}




この投稿にコメントする

削除パスワード

No.18836

Re:PostgreSQLのデータを配列に格納
投稿者---shu(2004/12/20 21:34:25)


>AIです。すみません。質問悪くて&初心者で・・・。

すみません。っていうまがあれば、問題解決に向かってください。
質問が悪いと思ったら、どう悪かったのか、見なおしてみてください。
&初心者で・・・、悪いと感じているような文面じゃないです。
初心者を名乗るなら、掲示板で質問をするより、基礎知識を身につけましょう。
時間はかかりますし、面倒くさいかもしれませんが、基本的なことがわからないまま、
質問を繰り返しても、同道巡りです。

あなたは、自分のプログラムを、なんとか動くようにしたいと思っている?かもしれません。
ただ、返信する側は、あなたがプログラムを理解できるようにしたいと思っている?のかもしれません。
(理解ができれば、自然とまともなプログラムが組めます。)


【掲示板ご利用上の注意】も、お忘れなく。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧