C言語ソースにホスト変数を宣言したヘッダをインクルードする記述を教えてください。下記の記述をしたのですが、エラーになります。

EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;

#include "../host_header.h"

EXEC SQL END DECLARE SECTION;

A 回答 (3件)

> ファイルが無いとエラーになってしまいました。

。。。

質問に ../host_header.h とあったので、ソースファイルがあるひとつ上に
host_header.h があると思ったのですが、実際にファイルはあるのですか?
    • good
    • 0
この回答へのお礼

できました。ヘッダーファイルがソースの上の別ディレクトリにあったため、
エラーとなっていました。ありがとうございます。

お礼日時:2001/10/10 12:57

EXEC SQL BEGIN DECLARE SECTION ~ END は、SQL のプリプロセッサが


解釈するところなので、Cのディレクティブを理解できないんじゃないで
しょうか?

こんな感じじゃ駄目なのかな?

EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL INCLUDE '../host_header.h'
EXEC SQL END DECLARE SECTION;

# やったことはないので、自信はないです (^^;

この回答への補足

回答ありがとうございます。ただ、やってみたのですが、ファイルが無いとエラーになってしまいました。。。。

補足日時:2001/10/10 11:44
    • good
    • 0

C言語というより、ある種のSQLプリプロセッサだろうと思いますが。


環境やエラーの内容について書いて頂いた方が的確な回答が出ると思います。
とりあえず、C言語(Cプリプロセッサ)のインクルード文としては、
上記の記述で普通は大丈夫です。ただし、ディレクトリを書き込むのではなく、
ソース中では
#include "host_header.h"
のようにして、コンパイルオプション(UNIXのCなら-Iなど)でインクルード
ファイルのディレクトリを指定するのが、より一般的です。

この回答への補足

#include "host_header.h" と記述したのですが、下記のエラーメッセージが出ます。
エラーメッセージは”SQL0008N ホスト変数宣言で見つかった字句 "#" が無効です。”
OSはNTです。

補足日時:2001/10/10 11:13
    • good
    • 0

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

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

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

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

QExcel VBAで、セルに入ってるデータ型を調べる方法は?

現在、Excel VBAでプログラムを作成しています。

Do Until ~ Loop の終了条件を
アクティブセルに入っているデータの型が文字列型の時
としたいのですが、そのようなことは可能なのでしょうか?

可能だとしたら、どのように記述したらいいのでしょうか?

当方のPCは
Win XP、Excel2003
です。

よろしくお願いいたします。

Aベストアンサー

VarType 関数を使うとか。

Sub SampleProc()

  Dim i As Long
  
  i = 1
  Do While Len(Cells(i, "A").Value) > 0
    If VarType(Cells(i, "A")) = vbString Then
      Exit Do
    Else
      ' // 処理
    End If
    i = i + 1
  Loop
  MsgBox CStr(i) & "行目で停止"

End Sub

QSQLをどのように記述すれば出来ますか?

SQLをどのように記述すれば出来ますか?

>データベース
種目 年月  金額
AA 200501 1000
AA 200502 1000
AA 200503 1000
BB 200501 1000
BB 200502 1000
CC 200503 1000
DD ・・・

>表示形式
種目 合計 年月1 年月2 年月3
AA 3000 1000 1000 1000
BB 2000 1000    1000
CC 1000       1000
DD ・・・

※注意点
年月範囲は固定ではなく適宜指定可能とする。
また、該当するデータが無い場合は空白とする。
上記の場合は「200501~200503」を指定した。

Aベストアンサー

なんか面白いやりかたが合ったので紹介します。
ピボットテーブルをつかうやり方。
ピボットテーブルとは、縦横おなじにて、斜めに1
がはいっているテーブルです。

年月 200501 200502 200503 ・・・
200501  1   0   0
200502  0   1   0
200503  0   0   1
・・・

作り方はこんなかんじ
CREATE TABLE `pivot`
(`年月` VARCHAR(6)
,`200501`INT(1) DEFAULT 0
,`200502`INT(1) DEFAULT 0
,`200503`INT(1) DEFAULT 0
,`200504`INT(1) DEFAULT 0
,`200505`INT(1) DEFAULT 0
,`200506`INT(1) DEFAULT 0
,UNIQUE(`年月`)
);

INSERT INTO `pivot` (`年月`)
values('200501'),('200502'),('200503'),('200504'),('200505'),('200506');
UPDATE `pivot` set `200501`=1 WHERE `年月`='200501';
UPDATE `pivot` set `200502`=1 WHERE `年月`='200502';
UPDATE `pivot` set `200503`=1 WHERE `年月`='200503';
UPDATE `pivot` set `200504`=1 WHERE `年月`='200504';
UPDATE `pivot` set `200505`=1 WHERE `年月`='200505';
UPDATE `pivot` set `200506`=1 WHERE `年月`='200506';

そこで、以下のSQLをすると一発ででます
SELECT `種別`,SUM(`金額`),
SUM(`金額`*`200501`),SUM(`金額`*`200502`),SUM(`金額`*`200503`) FROM `DB` LEFT JOIN `pivot` ON `DB`.`年月`=`pivot`.`年月` WHERE `DB`.`年月` BETWEEN '200501' AND '200503' GROUP BY `種別`;

メンテナンス用にピボットテーブルを予め大きめに
作っておくと良いかもしれませんね。

なんか面白いやりかたが合ったので紹介します。
ピボットテーブルをつかうやり方。
ピボットテーブルとは、縦横おなじにて、斜めに1
がはいっているテーブルです。

年月 200501 200502 200503 ・・・
200501  1   0   0
200502  0   1   0
200503  0   0   1
・・・

作り方はこんなかんじ
CREATE TABLE `pivot`
(`年月` VARCHAR(6)
,`200501`INT(1) DEFAULT 0
,`200502`INT(1) DEFAULT 0
,`200503`INT(1) DEFAULT 0
,`200504`INT(1) DEFAULT 0
,`200505`INT(1) DEFA...続きを読む

QVBAでオブジェクト変数にsetしたシートがactiveかどうかを調べるには?

標準モジュールの冒頭でワークシート用のオブジェクト変数を確保し、
あるタイミングで、あるシートをそのオブジェクト変数にSetしています。

で、そのシートに値をセットするときに、そのシートがActiveだった場合だけやりたい処理があるのですが、Setしてあるオブジェクト変数だけを見てそのシートがActiveか否かを判断する方法って、あるのでしょうか。

コード例)
Private oSheetA as Worksheet

Sub SetSheet(sName as String)
  Set oSheetA = worksheets(sName)
End Sub

Sub SetValue(nValue as integer)
  xxxxxx ←ここでoSheetAがActiveならやりたいことがある。
  oSheetA.Cells(nRow, nCol) = cValue
End Sub

具体的には、複数のBookを開いている状態で、Activeシートが何であるかはオペレータの操作次第なので固定化できない状態で、SetValueが呼び出されたとき、oSheetAがActiveだったら、値をセットするセルが見えるようにセルをActivateかスクロールさせたいんです。

標準モジュールの冒頭でワークシート用のオブジェクト変数を確保し、
あるタイミングで、あるシートをそのオブジェクト変数にSetしています。

で、そのシートに値をセットするときに、そのシートがActiveだった場合だけやりたい処理があるのですが、Setしてあるオブジェクト変数だけを見てそのシートがActiveか否かを判断する方法って、あるのでしょうか。

コード例)
Private oSheetA as Worksheet

Sub SetSheet(sName as String)
  Set oSheetA = worksheets(sName)
End Sub

Sub SetValue(nVa...続きを読む

Aベストアンサー

Option Explicit

Private oSheetA As Worksheet

Sub SetSheet(sName As String)
Set oSheetA = Worksheets(sName)
End Sub

Sub SetValue(nValue As Integer)
If oSheetA Is ActiveSheet Then
MsgBox ("hoge")
End If
oSheetA.Cells(1, 1) = nValue
End Sub

Sub Main()
SetSheet ("Sheet1")
SetValue (5)
End Sub

'実行できるようにソースは変更していますが,
'こんな感じでIs演算子で同じオブジェクトか比較してみるってのはどうでしょう?

Q拡張SQLの記述方法を教えてください(Oracle・SQLserver)

SQL文内に"sysdate"を記述してしまうとOracleでは動作しますが、
SQLsercerではエラーになると思います。そこで「拡張SQL」を
使用すればOracleでもSQLserverでも動作するようになると
聞いたのですが記述方法がわかりません。
どなたかご教授いただけませんでしょうか?

宜しくお願いいたします。

Aベストアンサー

拡張SQLとは、レコードの抽出や追加、更新などだけではなくて、複合文を使って、他の言語のように変数や条件文などを記述する方法です。

たとえば
BEGIN
DECLARE 変数名 型 ;
IF データベースがOracleか THEN
OracleでのSQL文で宣言した変数に値をセット ;
Else IF データベースがSQLserverか THEN
SQLserverでのSQL文で宣言した変数に値をセット
END IF
END
のような感じで一連のSQL文を書くことができるということではないでしょうか?
(この例は、SQL Anywhereでの例です。)

ひょっとしたら自分の認識が違うかもしれません。・・・
どなたか補足まってま~す。m(__)m

QVoidポインタで受け取った変数の型を調べる方法

あるライブラリの関数を利用しようとしたのですが、その関数の引数にVoidポインタがあり、どういう型のデータを格納したのかわかりません。このポインタのアドレスに格納されたデータの型を調べる関数なり方法なりというのはあるのでしょうか。

Voidポインタというのは型を問わずに受け取れるというのは利点ですが、受け取ったものがあらかじめなんだかわからない場合はどうするのでしょうか。よろしくお願いします。

Aベストアンサー

★基本的に調べようがありません。
・『void』ポインタはアドレス情報のみを受け渡しますので、型のサイズまでは分かりません。
 逆に言えば、型のサイズが分からないから『汎用ポインタ』と呼べるのです。
・あるライブラリの関数とは何?→どんな関数か分かりませんので、これ以上はアドバイス無理!
 ただ、C言語の qsort などでは比較用の関数で『void』ポインタを受け取りますが、その関数内で
 渡されたデータの『型』を指定します。→ポインタの形でキャストします。
 この比較用の関数は自前で用意する関数ですので、ソートするデータの型が分かっています。
 でも、ソートするデータ型が複数ある場合は、比較用の関数を複数作って切り替えます。
・あと関数に型を表す引数があれば、それを見て判断できますが、そうでない場合は『void』ポインタで
 渡される前の『型』の調べることは不可能です。→言語仕様より。
・以上。参考に。→一応、あるライブラリの関数とは何?

QSQL文をどう記述すれば良いか教えて下さい。

テーブルAが以下の様に在るとします。
連番(ユニークキー)/日付/社員コード/所属コード

そして、社員コード、所属コードの名称が、テーブルBに登録されています。
区分/コード/名称
ここで、区分+コードでユニークキーとなっていて、区分=1は社員コード、区分=2は所属コードとなっています。

単純に、テーブルAから、ある日付を指定して、連番・社員コード・所属コードを取得する場合、SQL文は以下の様になると思います。

SELECT 連番,社員コード,所属コード
FROM テーブルA
WHERE 日付='20030401'

この時、同時に、テーブルBから社員コードに対応する名称、及び所属コードに対応する名称を取得したい場合は、どの様に記述すれば良いのでしょうか?

Aベストアンサー

なんのSQLなのか、は記述くださいね。
ACCESS2000版で動作確認済みです(Oracle9iもOKかな?)

SELECT [テーブルA].[連番], [テーブルA].[日付], [テーブルA].[社員コード], [テーブルB].[名称] AS 氏名, テーブルB_1.名称 AS 所属
FROM (テーブルA INNER JOIN テーブルB ON [テーブルA].[社員コード]=[テーブルB].[コード]) INNER JOIN テーブルB AS テーブルB_1 ON [テーブルA].[所属コード]=テーブルB_1.コード
WHERE ((([テーブルB].[区分])="1") And ((テーブルB_1.区分)="2"));

QVBAでテキストファイルの件数を調べる方法

Access2000のVBAで関数を使用して
ファイルのパス名、ファイル名を指定すれば、
テキストファイルの件数を検索し変数に返す
関数はありませんか?
   
通常テキストファイルを開き1件1件カウントを
取っていけば件数を知ることは可能ですが、
数千レコードのテキストファイルが複数個存在
する場合処理スピードが遅くなるため何か
最適な関数はありませんか?
よろしくお願い致します。

Aベストアンサー

こんにちは。maruru01です。

No.2の方のFileSystemObjectを利用する方法です。

行数 = CreateObject("Scripting.FileSystemObject").OpenTextFile(ファイルのフルパス, 8).Line

複数のファイルをカウントするなら、ファイルでループを回せばいいでしょう。

あと、FileSystemObjectの参考ページを紹介しておきます。

http://www.bcap.co.jp/hanafusa/VBHLP/FSOme.htm

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp

参考URL:http://www.bcap.co.jp/hanafusa/VBHLP/FSOme.htm,http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/l

こんにちは。maruru01です。

No.2の方のFileSystemObjectを利用する方法です。

行数 = CreateObject("Scripting.FileSystemObject").OpenTextFile(ファイルのフルパス, 8).Line

複数のファイルをカウントするなら、ファイルでループを回せばいいでしょう。

あと、FileSystemObjectの参考ページを紹介しておきます。

http://www.bcap.co.jp/hanafusa/VBHLP/FSOme.htm

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp

...続きを読む

QVBでSQLの記述

ACCESS VBAで今あるシステムを作成しているのですが、
SQL文を使う際に
rs.Open "SELECT * FROM abc WHERE def='" & ghi & "'"
などと記述しますが、このシングルコーテーションや、セミコロンはどのような意味があってつけてるのですか?
ごちゃごちゃしてて理解するのに苦労します。
どなたかお願いします。

Aベストアンサー

#1です。

Where区は、「AND」「OR」で条件を追加します。

Where def=ghi AND xxx=yyy  
※def=ghi とxxx=yyy の両方が当てはまるもの

Where def=ghi or xxx=yyy  
※def=ghi とxxx=yyy の片方が当てはまるもの

となります。

QVBAで他のプログラムが起動しているか調べる方法

VBAで
D:\test\test.exe
が起動中か調べたいのですが
どのようにすれば良いですか?

http://www.vbalab.net/vbaqa/data/access/log/tree_532.htm

このページの方法を使えば、
exe以外のファイルが使用中かは調べることができたのですが
exeファイルの場合にはうまくいきません。

良い方法があれば教えてください。

Aベストアンサー

残念ながら・・・出来ません。
一応、プロパティの中に Handle ってのがあるのですが
取得できるのは ProcessID の値です。
以前、調べていて Handle を見つけた時は、
『やったー \(^o^)/』と思いましたが
ぬか喜びでした。。。orz

なお、当方の環境は、Windows7 Pro & Office2010 です。

QSQL文の後についてる「:;」ってなに?

select * from xxtable:; とか、最後にくっつけるモノにはなにか意味が?
わたしは、別にくっつけないで、「そりゃF5~」ってやってるんですけど。
SQLコマンド文を考える時に参考にしてる本には、特に書いてないのです。
やるからには、意味を知っておきたい気分って程度です。よろしく。

Aベストアンサー

 もう少し説明を付け加えます。
 SQL PLUSでは、SQL文が入力後に改行コードを受け取ってもSQLの実行を行いません。つまり、SQL文が複数行に分かれて記述されている事を前提に動いているからです。SQL PLUSは、「;」を読みこんだ時に初めてSQL文が終了した事が分かるので、今まで入力されてきたSQL文を解釈して実行します。


人気Q&Aランキング

おすすめ情報