こんにちわ。
UNIXのC++でPro*Cを使って動的SQLを使ったプログラムを作っています。
プログラムコードは出来上がっていて、単独コンパイルは通るのですが、
実行形式のプログラムを作る時のリンクで「未定義のシンボル」として
以下の4ライブラリ関数がエラーになります。

sqlald()関数、sqlprc()関数、sqlnul()関数、sqlclu()関数

これはおそらく、リンクする際にこれらの関数が含まれているライブラリを
リンクできていないだけなのではないかと思っているのですが、
肝心のライブラリがどこのどれなのかがわかりません。
どなたかご存知の方がいらっしゃいましたら、教えてください。

もしかして、プログラム中でもこれらの関数をextern する以外に
何か必要なのでしょうか?

PS.教えてgooのプログラミング→C/C++のカテゴリにも質問させていただいて  います。
  でもわからないので、誰か助けて~!!という感じです!!

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

A 回答 (1件)

Pro*C プリコンパイラ・プログラマーズ・ガイド は読まれましたか?


もし、読まれていないのであれば、まずは読まれてはいかがでしょうか?
    • good
    • 0
この回答へのお礼

もちろん、読破しています。
プログラマーズガイドに乗っていない、おまじないがあったようです。
これについては、別のルートで専門家の方からご指導いただいて
解決しました。
お忙しいところ、アドバイスを下さってありがとうございました。

お礼日時:2001/10/03 15:47

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

関連するカテゴリからQ&Aを探す

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

QPro*C/C++について

今回OracleのデーターベースにはC言語でアクセスするということで、

Pro*Cを使ってSQL文をCに埋め込むということなのですが今例文なんかを探しています。

なにかいいホームページがあれば教えていただけないでしょうか?

またいいPro*Cについての参考書もあればぜひ教えてください。

よろしくお願いします。

Aベストアンサー

Pro*C の製品にサンプルコードがついているはずなので、サンプルとしては
それが一番良いと思います。

後、検索サイトで探してみると幾つかヒットしますね。参考URLにふたつほど
載せておきますが、これは google で

"Pro*C" サンプル

をキーワードにして検索をかけてみた結果です。

# 自分で使ったことはないので、あまり自信はありません

参考URL:http://www.eva.hi-ho.ne.jp/shinnai/Oracle7/ProCcording.html,http://dev.tipslab.ne.jp/Developer/programing/msvcProC1.htm

QSQLite C/C++ でのテーブル数の取得

よろしくお願いします。
 テーブル名「TB1332」の有無を確認するSQL 文をこのようにしました
select count(*) from sqlite_master where type='table' and name='TB1332';

PupSQLite でのcount(*)の値
当該テーブルが存在する場合1
当該テーブルが存在しない場合0
このように正しい結果が得られます。

しかし、Visul Studio 2010 C++ で下記のコードを実行しますと、result の値は、テーブルの有無に関係なく、常に0となります。
int result = sqlite3_exec(pDb, "select count(*) from sqlite_master where type='table' and name='TB1332';", NULL, NULL, &err);

C/C++ で該当する、テーブル数を取得するコードの書き方を教えていただけないでしょうか。

環境
C/C++
Visual Studio 2010 Proffesional
SQLite3
PupSQLitehttps://www.eonet.ne.jp/~pup/software.html

よろしくお願いします。
 テーブル名「TB1332」の有無を確認するSQL 文をこのようにしました
select count(*) from sqlite_master where type='table' and name='TB1332';

PupSQLite でのcount(*)の値
当該テーブルが存在する場合1
当該テーブルが存在しない場合0
このように正しい結果が得られます。

しかし、Visul Studio 2010 C++ で下記のコードを実行しますと、result の値は、テーブルの有無に関係なく、常に0となります。
int result = sqlite3_exec(pDb, "select count(*) from sqlite_master where ty...続きを読む

Aベストアンサー

http://idocsq.net/page/514
「sqlite3_exec」の戻り値は正常終了が0で異常終了がそれ以外なので、SELECT文が正常に行われていれば常に0が返ります。

cygwin環境ですが以下のようにすれば、テーブルがあるかどうか判断できました。

#pragma comment( lib, "sqlite3.lib" )

#include <sqlite3.h>
#include <stdio.h>

// 抽出結果が返るコールバック関数
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++)
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
return SQLITE_OK;
}

int main(int argc, char* argv[])
{
sqlite3 *db;
char *zErrMsg = 0;

// データベースファイルを新規生成
int rc = sqlite3_open("Sample.db", &db);


rc = sqlite3_exec(db, "SELECT count(*) from sqlite_master where type='table' and name='sample'", callback, 0, &zErrMsg);

// データベースを閉じる
sqlite3_close(db);
return 0;
}

http://idocsq.net/page/514
「sqlite3_exec」の戻り値は正常終了が0で異常終了がそれ以外なので、SELECT文が正常に行われていれば常に0が返ります。

cygwin環境ですが以下のようにすれば、テーブルがあるかどうか判断できました。

#pragma comment( lib, "sqlite3.lib" )

#include <sqlite3.h>
#include <stdio.h>

// 抽出結果が返るコールバック関数
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++)
printf("%s = %s\n", azColNam...続きを読む

QINDEX関数とMATCH関数を組み合わせてできません

早速ですが質問です2つのエクセル表で


  A B         C       D
1 青通山岳     11L9R3
2 青通山岳     11L9R4
3 青通山岳     11L9R5
4 青通山岳     12
5 青通山岳     13
6 池監東     3R12R5R1
7 池監東     3R12R5R2
8 池監東     3R13
9 池監東     3R14
10 池監東     3R15
というファイルと
  A B        C       D
1 青通山岳     11L9R4     台41-034
2 青通山岳     11L9R5     台41-034
3 青通山岳     11       台41-034
4 青通山岳     13       台41-034
5 池監東     3R12R5R1    台41-034
6 池監東     3R       台41-034
7 池監東     3R13      台41-034
8 池監東     3R       台41-034
9 池監東     3R15      台41-034
というような感じの二つの別のファイルがあり
上のファイルと下のファイルのABC項目が一致するものに下のファイルのD欄を反映させたいのですが何かイイ方法はないでしょうか?上のファイルのD欄には何も入力されてません。
データが半端ない量なので宜しくお願いします。

早速ですが質問です2つのエクセル表で


  A B         C       D
1 青通山岳     11L9R3
2 青通山岳     11L9R4
3 青通山岳     11L9R5
4 青通山岳     12
5 青通山岳     13
6 池監東     3R12R5R1
7 池監東     3R12R5R2
8 池監東     3R13
9 池監東     3R14
10 池監東     3R15
というファイルと
  A B        C       D
1 青通山岳     11L9R4     台41-034
2 青通...続きを読む

Aベストアンサー

>INDEX関数とMATCH関数を組み合わせてできません

VLOOKUP関数が良いのではないでしょうか。
その前に質問内容に疑問点があります。「下の方の(ファイル2)の
”D”の内容を検索したいのに何故9行とも”台41-034”なのでか?」

○ファイル1,2共A,B,C列を接続して”F列”に入れます。
 (F2 に次の式を入れて下方向にコピーする =A2&B2&C2 )
○ファイル2の D列をG列にコピーする
○ファイル2のF2~G10をドラッグし「表示」「名前」で表に適当な名前をつける(例えば”B表”)
○ファイル1の G2に次の式を入れ,下へコピーします。
 =VLOOKUP(F2,B表,2,0)
○検索結果をE列に”値”のみコピーする。
 (ファイル1のG2~G11をE2に”形式を選択して貼り付けで”値”の み貼り付け)  これでやってみて下さい。

Qリンクテーブルを CopyObject するとリンク情報がコピーされる

ACCESSでリンクしたテーブルを DoCmd.CopyObject でカレントのmdbにコピーすると、テーブル本体ではなく、リンク情報がコピーされてしまいます。
リンクされたテーブルの本体をコピーするにはどうすれば良いのでしょうか。
データ用のmdbとプログラム用のmdbを分けていて、プログラム側からテーブルをバックアップしたいので、このような方法をとっていますが、他に良い方法があれば教えてください。

Aベストアンサー

DAOを使用した方法ですが...
適当なフォームにコンボボックスとコマンドボタンを配置して下さい

下記コードによって、掲題の事は可能だと思われます
アレンジすれば、リンクテーブルの作成とかも可能です

※参照設定にて「Micorosoft DAO *.* Object Library」をチェックして下さい
'-------------------------------------------------
Private Sub Form_Open(Cancel As Integer)
  
  Dim Dbs     As DAO.Database
  Dim Tdf     As DAO.TableDef
  Dim strTbls   As String
  
  Set Dbs = CurrentDb
  
  'リンクテーブル一覧作成
  strTbls = ""
  For Each Tdf In Dbs.TableDefs
    If Left(Tdf.Name, 4) <> "MSys" And Tdf.Connect <> "" Then
      strTbls = strTbls & Tdf.Name & ";"
    End If
  Next
  
  Set Dbs = Nothing
  
  'コンボボックスにリンクテーブルを設定
  Me.cmbTableName.RowSourceType = "Value List"
  Me.cmbTableName.RowSource = strTbls
  
End Sub

Private Sub cmdInportTable_Click()
  
  Dim Dbs     As DAO.Database
  Dim Tdf     As DAO.TableDef
  Dim strSrcDbs  As String
  Dim strSrcTbl  As String
  Dim strCpyTbl  As String
  
  'テーブルが指定されなければ抜ける
  If IsNull(Me.cmbTableName.Value) = True Then Exit Sub
  
  '対象テーブル設定
  Set Dbs = CurrentDb
  Set Tdf = Dbs.TableDefs(Me.cmbTableName.Value)
  
  'リンク先DB、リンクテーブル、インポート後の名前指定
  strSrcDbs = Mid(Tdf.Connect, 11)
  strSrcTbl = Tdf.SourceTableName
  strCpyTbl = Tdf.SourceTableName
  
  '対象リンクテーブルをインポート
  Dbs.TableDefs.Refresh
  DoCmd.TransferDatabase _
          acImport, _
          "Microsoft Access", _
          strSrcDbs, _
          acTable, _
          strSrcTbl, _
          strCpyTbl
  
  '完了メッセージ
  MsgBox "[" & Tdf.Name & "] をインポートしました"
  
  Set Tdf = Nothing
  Set Dbs = Nothing
  
End Sub

DAOを使用した方法ですが...
適当なフォームにコンボボックスとコマンドボタンを配置して下さい

下記コードによって、掲題の事は可能だと思われます
アレンジすれば、リンクテーブルの作成とかも可能です

※参照設定にて「Micorosoft DAO *.* Object Library」をチェックして下さい
'-------------------------------------------------
Private Sub Form_Open(Cancel As Integer)
  
  Dim Dbs     As DAO.Database
  Dim Tdf     As DAO.TableDef
  Dim strTbls   As String
 ...続きを読む

QAccessのハイパーリンクのパスを設定する「ハイパーリンクの挿入」を表示させる方法を教えてください。

Access2003を使用しています。
フォームにハイパーリンク型のテキストボックスを配しました。
そこにハイパーリンクのパスを貼る時の「ハイパーリンクの挿入」の出し方について教えてください。
使っている.mdbの開き方は2種類あります。
(1)立ち上げて最初に表示されるメッセージで「開く」ボタンを押すと、入力しかできない(これの名称がわからないため、言葉の説明ですみません)。
(2)中の設定などをいじりたいときは、ctrl+[開く]で立ち上げています。
このやりかたで立ち上げたときは、フォーム上のメニューバーの挿入に「ハイパーリンク」が出てくるか、ハイパーリンクのテキストボックスにカーソルを置いた状態で右クリックすると「ハイパーリンク」が表示されます。
ところが、(1)の入力しか出来ないやり方で開くと、「ハイパーリンクの挿入」を立ち上げるには、カーソルをハイパーリンク型のテキストボックスにカーソルを置いた状態でショートカットキーのctrl+K を使うしかないようなんです。メニューバーに表示されないのです。
これは、どうしてなのでしょうか?
この問題を解決する方法を教えていただけないでしょうか?
お手数をおかけして申し訳ありませんが、よろしくお願いいたします。

Access2003を使用しています。
フォームにハイパーリンク型のテキストボックスを配しました。
そこにハイパーリンクのパスを貼る時の「ハイパーリンクの挿入」の出し方について教えてください。
使っている.mdbの開き方は2種類あります。
(1)立ち上げて最初に表示されるメッセージで「開く」ボタンを押すと、入力しかできない(これの名称がわからないため、言葉の説明ですみません)。
(2)中の設定などをいじりたいときは、ctrl+[開く]で立ち上げています。
このやりかたで立ち上げたときは、フォーム上の...続きを読む

Aベストアンサー

No.1です。

> 設定の仕方がわかりません。

コマンドボタンの名前を『リンク挿入』、ハイパーリンクを挿入するテキストボックスの名前を
『リンク』とすると、以下のようなコードになります(上記コマンドボタンのクリック時イベント):

Private Sub リンク挿入_Click()
On Error GoTo エラー処理

  'ハイパーリンクを挿入するテキストボックスに移動
  リンク.SetFocus
  '『ハイパーリンクの挿入』ダイアログを表示
  DoCmd.RunCommand acCmdInsertHyperlink

終了処理:
  Exit Sub
エラー処理:
  If Err = 2501 Then '上記ダイアログでキャンセル選択時はそのまま処理を継続
    Resume Next
  Else            '上記以外のエラー時はメッセージを表示して処理を中止
    MsgBox Err & ":" & Error$, , Me.Name & " リンク挿入"
    Resume 終了処理
  End If
End Sub


なお、上記のコードは、ハイパーリンクを挿入するテキストボックスとコマンドボタンが同じ
フォーム(又は同じサブフォーム)上にあることを前提にしています。
テキストボックスが「サブ」という名前のサブフォームに、コマンドボタンがメインフォームにある
場合は、「リンク.SetFocus」の1行を、以下のように変更します:

  With サブ
    .SetFocus
    !リンク.SetFocus
  End With


・・・以上です。


*VBAではなく『マクロ』オブジェクトで行う場合は、テキストボックスやサブフォームへの移動は、
 「コントロールの移動」アクションを選択し、引数にコントロール名を指定します。
 ハイパーリンクの挿入は、「コマンドの実行」アクションを選択し、引数に「ハイパーリンクの
 挿入」を指定します。

No.1です。

> 設定の仕方がわかりません。

コマンドボタンの名前を『リンク挿入』、ハイパーリンクを挿入するテキストボックスの名前を
『リンク』とすると、以下のようなコードになります(上記コマンドボタンのクリック時イベント):

Private Sub リンク挿入_Click()
On Error GoTo エラー処理

  'ハイパーリンクを挿入するテキストボックスに移動
  リンク.SetFocus
  '『ハイパーリンクの挿入』ダイアログを表示
  DoCmd.RunCommand acCmdInsertHyperlink

終了処理:
  Exit Sub...続きを読む


人気Q&Aランキング

おすすめ情報