• 締切済み

C言語 埋め込みSQL ecpg

C言語の埋め込みSQLで質問です。 ご教示ください。初心者です。 【環境】 Windows7 64bit gcc:5.3.0 PostgreSQL:9.6.1 【pgcファイル】 #include <stdio.h> exec sql include sqlca; int main(char* argx[], char* argv[]){ exec sql begin declare section; char NAME[256]; char MAIL[256]; exec sql end declare section; exec sql connect to bookmark user dbuser; strcpy(NAME,argv[1]); strcpy(MAIL,argv[2]); exec sql insert into Name_list (name, mail) values (:NAME, :MAIL); exec sql commit; exec sql disconnect; return 0; } 【症状】 以下のコマンドを実行するとエラーが出ます。 -Iでインクルードしようとしています。 C:\cTest\c>ecpg name_list_db.pgc -I C:\postgresql\include ecpg: ファイル"-I"をオープンできませんでした: No such file or directory ecpg: ファイル"C:\postgresql\include"をオープンできませんでした: No such file or directory 一応Cファイルは生成されます。 強引にgccすると下記のエラーが出ます C:\cTest\c>gcc -o name_list_db name_list_db.c -I C:\postgresql\include -lecpg c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lecpg collect2.exe: error: ld returned 1 exit status どうすれば良いかご教示ください。 この辺のWebサイトを参考にしました。 http://se.cite.ehime-u.ac.jp/~aman/memo/SQL/ecpg.html 以上よろしくお願いいたします。

noname#237545
noname#237545

みんなの回答

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.2

最初の引数はint型と決まっています。 これは言語仕様ですので変えられません。 それならmainにしたくないとか==はやっぱり=にしたいなんてのもダメでしょ?

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

int main(char* argx[], char* argv[]){ ではなくて int main(int argc,char* argv[]){ ですね。

noname#237545
質問者

補足

int main(char* argx[], char* argv[]){ 両方ともchar型で定義したいのですが、 int main(int argc,char* argv[]){ にすべきなのでしょうか?

関連するQ&A

  • C言語の課題なのですが、助けてください

    C言語のプログラミングの課題で、「以下のプログラムをキーワードを引数として入力できるように変更する(argvを利用する)」という問題なのですが、プログラミングが苦手な私にはさっぱりわからず、大変困っています。設問のプログラミングがわかる方がいらっしゃいましたら、教えていただけると大変助かります。よろしくお願いします。 #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_LEN 256 int main(int argc, char *argv[]) { FILE *rfp; FILE *wfp; int i, score; double evalue; char id[MAX_LEN], name[MAX_LEN], fname[MAX_LEN]; char keyword[] = "glu"; for(i = 0; i < 100; i++){ sprintf(fname,"files/%d.txt",i); if((rfp = fopen(fname, "r")) == NULL) { printf("入力ファイルが存在しません。\n"); return (EXIT_FAILURE); } while (fscanf(rfp,"%s\t%s\t%d\t%f", id, name, &score, &evalue) != EOF){ if (strstr(name,keyword) != NULL){ printf("%s\n",id); } } fclose(rfp); } return (EXIT_SUCCESS); }

  • DB2付きのC言語がコンパイルできません。

    CはMicrosoftVisualStudio2012 DBはIBM DB2 です。 同じ環境でコンパイル実行できていたのに、 PCがおかしくなったのでフォーマットして入れなおしたらコンパイルができなくなりました。 よろしくおねがいします。 ソースはこちらです。 #include <stdio.h> exec sql include sqlca; void main() { exec sql connect to sample; if(SQLCODE!=0) { printf("SQL CONNECT %d", SQLCODE); } else { exec sql update Test1 set col2 = 'bababa'; if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE); } exec sql connect reset; } コンパイルコマンドです db2 connect to sample db2 prep Test11.sqc bindfile db2 bind Test11.bnd cl -Z7 -c -W2 -D_X86_=1 -DWIN32 -I"c:\Program Files\IBM\SQLLIB\include" Test11.c link -debugtype:cv -outTest11.exe %1.obj "c:\Program Files\IBM\SQLLIB\lib\db2api.lib" エラーメッセージです Test11.obj : error LNK2019: 未解決の外部シンボル _sqlaaloc@16 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlacall@20 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlasetdata@24 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastop@4 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastrt@12 が関数 _main で参照されました。 Test11.exe : fatal error LNK1120: 5 件の未解決の外部参照

  • 画像添付とC言語

    いつも大変お世話になっております。 標記の件。 画像添付がDebut NCH Softwareを助言を 受けて使ってみましたが、多分、添付されていない でしょう。どうすれば添付できるか教えてください。 その画像は環境変数を写した画面ですが環境変数は 「C:¥MinGW¥bin¥」で間違いないと思うのですが C:\MinGW>gcc test1.c -o test1 'gcc' は、内部コマンドまたは外部コマンド、 「操作可能なプログラムまたはバッチ ファイルとして 認識されていません。」 と出ます。 gccはMinGWのインストールの後半でやったつもりですが、 それではダメでしょうか? アドバイスのほど、よろしくお願い申し上げます。 あと、どこに着目すればいいでしょうか?

  • bccは分かりましたがgccが使えません

    Cのソースの#include <stdio.h>でエラーになります。 gccではbccのbcc32.cfgで行うような設定はどのようにすればよいですか? MINGWのコンソールで $ echo $C_INCLUDE_PATH c:/msys/1.0/mingw/include;c:/msys/1.0/mingw/lib/gcc/mingw32/3.4.5/include このように出ます。 $ gcc myapp.c で#include <stdio.h>の行でコンパイルエラーです。 MINGWでは$C_INCLUDE_PATHを正しく設定できているみたいですが、gcc.exeにそれが伝わっていないみたいです。 AUTOEXEC.BATには何も追記したくないので何も追記していません。 どうすればライブラリのパスを通せますか?

  • C言語からgnuplot呼び出し

    C言語からgnuplotを呼び出したいのですが、一瞬表示されてすぐ消えてしまいます。 プログラムは以下のように書きました。 --------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char **argv) { FILE *gid; int i; double x; gid=popen("gnuplot -persist","w"); for (i=0; i<100 ;i++){ x = 0.03*i; fprintf(gid,"plot sin(x-%f*pi)\n",x); } pclose(gid); } --------------------------------------------------------------- この後、 gcc test.c -lm ./a.out でコンパイル、実行しました。 かなり初心者なので初歩的な質問かもしれませんがよろしくお願いします。

  • C言語についてなのですが・・・

    さきほども上げたのですがカテゴリが間違っていたのでもう一回書き込みました まだプログラムの勉強をはじめた初心者なのですが、 テキストファイルから文字を読みこみ、大文字ならば小文字に変換し辞書順に並びかえるプログラムを作っているのですがどうしてもうまくいきません。 例えばtest.txtに XXX YYY YY XX BBB aaa aa BB とあれば aa aaa bb bbb xx xxx yy yyy と表示されるよにしたいんです。 自分が作ったプログラむはこれです。 まだテキストファイルからでなくキーボードからの入力になっていますが・・・ #include<stdio.h> #include<stdlib.h> #include<string.h> #include <ctype.h> int soto( const void *x, const void *y); int main(int argc, char *argv[]){ FILE *input; char str1[1000]; int i, j; for (i = 1; i < argc; i++){ qsort(argv[i], 1000, sizeof( char *), soto); strcpy(str1, argv[i]); for(j = 0; j < 100; j++){ str1[j] = tolower( str1[j] ); } printf("%s\n", str1); } return 0; } int soto( const void *a, const void *b){ char *x, *y; x = (char*)a; y = (char*)b; return x-y; } これだと小文字にはなるんですがソートされずに表示されてしまいます・・・ どのようにすればいけるのかご指摘のほどおねがいします

  • C言語の変数について

    C言語の変数について教えていただきたいです。 C言語で下記のような設定をした場合、変数A、Bに設定する値にはバイト数制限 はないのでしょうか? バイト数制限がなくなる場合、なぜそうなるのかを教えていただきたいです。 よろしくお願いします。 #include <stdio.h> void test( char **B); int main( int argc, char *argv[] ) { char *A = NULL; char *B = NULL; A = argv[1]; test( B ); return 0; } void test( char **B ) { strcpy(B, "ABCD"); return 0; }

  • EXEC SQL INSERT時のホスト変数に関して

    いつもお世話になります。今回は静的SQLに関して質問です。 次のファイルがあるとします(DB2使用)。 ■レイアウト FILEA フィールド 桁数 属性 1. FLD010 5 A 2. FLD020 7 A 3. FLD030 1 A ■プログラム(簡略) EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; struct DEF_FILE_A { char fld010[6]; char fld020[8]; char fld030[2]; } a; EXEC SQL DECLARE c1 CURSOR FOR SELECT FLD010, FLD020, FLD030 FROM XXXXXX EXEC SQL OPEN c1; EXEC SQL FETCH c1 INTO :a.fld010, a.fld020, a.fld030; (中略) EXEC SQL CLOSE c1; 問題なのはSQLコーディング上のホスト変数に関してです。 上記のstruct DEF_FILE_Aの記述のように、実際のファイルの フィールド長に+1した長さの定義をして(NULL値が入るから)記述しています。これにより、fld010~fld030の値には正しい結果が、 FETCHで入ってきています。 ところが同じように、このファイルに挿入する場合に 下記のように記述しました。 EXEC SQL INSERT INTO XXXXXX(FLD010, FLD020, FLD030) VALUES ( :a.fld010, :a.fld020, :a.fld030 ); を、実行しますと、SQLCODEには-433(Value is too long)が 入ってきて、INSERTされません。別に実行時にエラーで落ちたりはしませんが、結果として何も挿入されません。 試しに、ファイルレイアウトと同じ桁数の別のホスト変数を 定義して試してみました。結果はOKでした。 皆さんにお聞きしたいのは、SQLの記述では、入力時は +1桁したホスト変数で受け、更新や挿入時にはファイルレイアウト と同じ桁数で定義した別のホスト変数を定義しないといけないのでしょうか? それとも、根本的に間違った解釈をしているでしょうか? 宜しくご教授頂きたく存じます。

  • MinGWをXPにインストール後 DOSのipconfig など使えな

    MinGWをXPにインストール後 DOSのipconfig など使えなくなる 標記の通り、昨日MinGWというC言語の環境をインストールした。 それに応じてシステムの環境関数もいくつか追加した。下記: 1 MINGW_PATH=G:\MinGW 2 C_INCLUDE_PATH=%MINGW_PATH%\include;%MINGW_PATH%\lib\gcc\mingw32\3.4.5\include 3 CPLUS_INCLUDE_PATH=%MINGW_PATH%\include\c++\3.4.5;%MINGW_PATH%     \include\c++\3.4.5\mingw32;%MINGW_PATH%\include\c++\3.4.5backward;%C_INCLUDE_PATH% 4 LIBRARY_PATH=%MINGW_PATH%\lib;%MINGW_PATH%\lib\gcc\mingw32\3.4.5 5 PATH=%MINGW_PATH%\bin;%MINGW_PATH%\libexec\gcc\mingw32\3.4.5 そうしてから、DOSでipconfig 出来なくなるだけじゃなく、社内用のメールボクスも開けなくなる。 一体なぜか? どなたか教えていただきませんか

  • SQLで小数点の計算がしたいです。

    postgresql8.2.4を使っています。 select to_char(10/3, '99D999'); とすると、 3.000となります。 10/3=3.3333....ではないのでしょうか? 他のSQL(MySQLやSQLServer,Oracle,DB2)もどう記述するか知りたいです。

専門家に質問してみよう