ORACLEのSQL文をC++を使って動作するには何か問題がありますでしょうか?
今回はじめてwebサーバを使ってシステムを行うのでよくわかりません。
よろしくおねがいします。

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

構文 SQL」に関するQ&A: SQLのコマンドでif構文

A 回答 (2件)

わたしが知ってる限りですが


ORACLEにはSQLインタフェースとして、Oracle Pro*C/C++プリコンパイラを提供しています。要は普通のCおよびC++のソースにSQLを組み込んでDBにアクセスするものです。
実行モジュールの作成は以下の流れになります。
(1)SQL組み込みC++ソース作成
(2)プリコンパイルをして実際のC++ソースを生成
(3)C++をコンパイル

理屈ではSQL組み込みC++ソースは構文上、C++コンパイラには認識されないので、
プリコンパイルをしてC++ソースを生成するといった形になります。SQLの部分は
ORACLEランタイムライブラリのコールになるんだと思います。
実際には(1)を作ってmakeするだけだと思いますが。

質問の答えとしては、問題ないと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。何か参考になる書籍があれば教えていただけないでしょうか。なにぶん初心者なもので、できるだけ簡単なものがいいです.何度もすみません。

お礼日時:2001/06/19 17:52

ORACLEのバージョンは、何でしょうか?


僕は、8.05までしか知りませんが、
「Oracle Object For OLE(oo4o)」を使えば簡単に実装できましたよ。
以前やった仕事で使ったので問題ないと思います。
    • good
    • 0
この回答へのお礼

ORACLE8iです。問題ないということですね。ありがとうございました。

お礼日時:2001/06/20 10:21

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

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

QVC++からのoracle接続方法

初めまして。
助けてください。今日も帰れません。
現在VCアプリケーションでoracleデータベースの
チェック処理の実現方法で悩んでいます。
connect及びselectする方法が力不足の為、
解りません。
(以下に実行環境を明記します。)

OSはwindowsNT(SP6)
APはVC++6.0
oracle8.0
です。

何方かご存知の方が要らしたら教えて頂けないで
しょうか?

Aベストアンサー

こんにちは。itohhといいます。

前にも同じようなことをアドバイスしたような...

そのときに、参考となるURLを紹介したのと同じですが載せておきます。

・ADOを使ったデータベースアクセス
URL:http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_ADO.html

あとは、ご自分でGoogleなどで検索してみてください。

参考URL:http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_ADO.html

QVC++ExpressとSQLでの使用方法

漠然とした内容で申し訳ないのですが、
チャリンコ乗れるからナナハン乗れるだろうといっているようなものかもしれませんが、
printf使えるからポインタもばっちりといっているようなものかもしれませんが、

そこをあえて。
C言語とC++を3ヶ月勉強しました。
(ボーランドのコンパイラを使ったコマンドラインのみ)

その昔、vbスクリプトでSQLでアクセスのMDBからWEBへ表示させる
簡単なプログラムを作ったことがあります。
去年あたりVB2008あたりで簡単な計算でプログラムなどをつくりました。

このたびわけあって今後はCの系統でやっていこうと思っています。
(純粋なプログラマーをめざしているわけではないし、私には無理なので)
で、今回VC++でSQLで売り上げ管理もどきを練習を兼ねて作ろうと思っています。

ですが、とっかかりというか道筋がほしいのです。
1.上記経験からアクセスに相当するデーターベースが必要と思うのですが
  何を使えばよいのでしょうか。
2.VC++ExpressとSQLserverExpressは繋がりますか?
3.VC++ExpressとMySQLはどうでしょうか?
4.2と3どちらで行ったほうがよいでしょうか?
5.VC++はVBのようにイベントドリブンで使えるのでしょうか?
6.よい参考書やサンプルがあれば教えてください。

漠然としていますがとっかかりがほしいのです。

漠然とした内容で申し訳ないのですが、
チャリンコ乗れるからナナハン乗れるだろうといっているようなものかもしれませんが、
printf使えるからポインタもばっちりといっているようなものかもしれませんが、

そこをあえて。
C言語とC++を3ヶ月勉強しました。
(ボーランドのコンパイラを使ったコマンドラインのみ)

その昔、vbスクリプトでSQLでアクセスのMDBからWEBへ表示させる
簡単なプログラムを作ったことがあります。
去年あたりVB2008あたりで簡単な計算でプログラムなどをつくりました。

このたびわけ...続きを読む

Aベストアンサー

C++ & MFC にどっぷり浸かってきましたが,最近は C# が楽しいですね。
GUI 周りは楽チンやし。(C の系統とは言い難いですが。C 風味ぐらい?)

これと,SQL Sever Compact の組み合わせが,お手軽で結構使えそうです。
http://www.atmarkit.co.jp/fdotnet/joyofprogram/20080701devssce/devssce_01.html

こういうのもありますよ,ということで。
ご参考まで。


あと,VC++ Express Edition でも Windows API をゴリゴリ使って,GUI なアプリを作ることは出来ます。
リソースエディタが使えなかったり,若干面倒ですが。
MFC も大部分は API に薄皮一枚被せたようなものなので。

QVC++でSQLへSELECT文を送ったのですが…

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <string>
using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
char a;

int main(void)
{
String^ str;
SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\○○\\test.mdf;Integrated Security=True;User Instance=True");
sqlConn->Open();
str = "Select test FROM Table1";
SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);//
SqlDataReader^ ExecuteReader ();
sqlConn->Close();
}

int sub()
{
a = ExecuteReader;
printf (a,"表示テスト\n");
return 0;
}

の構文でSQL ServerへSELECT文を送り、そこで得た結果を
表示しようと思ったのですが

1>select-test.cpp
1>.\select-test.cpp(28) : error C2065: 'ExecuteReader' :
定義されていない識別子です。
1>.\select-test.cpp(29) : error C2664: 'printf' : 1 番目の引数を
'char' から 'const char *' に変換できません。
(新しい機能 ; ヘルプを参照)
1> 整数型からポインタ型への変換には
reinterpret_cast、C スタイル キャストまたは
関数スタイル キャストが必要です。


と2つのエラーを返されてしまいました。

開発環境は
OS XPのHomeEditon
Visual C++ ExpressEdition
SQL Server 2005 Express
です。
よろしくお願いします。

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <string>
using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
char a;

int main(void)
{
String^ str;
SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\○○\\test.mdf;Integrated Security=True;User Instance=True");
sqlConn->Open();
str = "Select test FROM Table1";
SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlCo...続きを読む

Aベストアンサー

ごめんなさい ・・・ SqlCommandにExecuteはありませんね

SqlDataReader^ exeReader = sqlCmd->ExecuteReader();
ですね
subの呼び出しを
sub( exeReader );
とします

関数sub側は
void sub( SqlDataReader ^objRd )
{
  // DBより取得したレコードを取得する
  while( objRd->Read() ) {
    Console::Writeln( L"{0}", objRd[0] );
  }
}
といった具合にします

C++/CLIでは printfより Console::WriteやWiltelnのほうが親和性がいいでしょう

QVC++6.0での配列の動作不良

現在、VC++6.0のWin32 Console Applicationプロジェクトでプログラムを書いているのですが、配列の様子がおかしいです。
具体的に言うと、ヘッダで

#define N 10
#define NN (2*N*2*N)

double A[NN+1][NN+1],S[NN+1][NN+1];
double B[NN+1],C[NN+1];

と配列を宣言しているのですが、A,B,Cそれぞれの配列への値の書き込みは普通に行えるのですが、
Sに値を書き込んでいる最中にプログラムが強制終了していまします。エラーメッセージなどはでません。
デバッグすると、Sに値を書き込むfor文の繰り返しの最後のほうに

バンドルされていない例外は***.exeにあります。0xC0000005:Access Violation

というメッセージが出てそこでプログラムが終了してしまいます。なぜでしょうか?
AとSのfor文はまったく同じで、SかわりにAを使うと、このエラーは生じません。
またヘッダで、

#define N 10
#define NN 400

double A[NN+1][NN+1],S[NN+1][NN+1];
double B[NN+1],C[NN+1];

とNNを数字で表すとこのエラーが生じず、普通に実行されます。なぜこのようなことが起こるのでしょうか?
どなたか教えていただければ幸いです。お願いします。

現在、VC++6.0のWin32 Console Applicationプロジェクトでプログラムを書いているのですが、配列の様子がおかしいです。
具体的に言うと、ヘッダで

#define N 10
#define NN (2*N*2*N)

double A[NN+1][NN+1],S[NN+1][NN+1];
double B[NN+1],C[NN+1];

と配列を宣言しているのですが、A,B,Cそれぞれの配列への値の書き込みは普通に行えるのですが、
Sに値を書き込んでいる最中にプログラムが強制終了していまします。エラーメッセージなどはでません。
デバッグすると、Sに値を書き込むfor文の繰り返...続きを読む

Aベストアンサー

締め切られていないようなので補足しますと。
---
auto変数にてスタックに領域を確保する場合は linkパラメータでstack領域を増やすことで解決します。が、お薦めしません。
一時的に領域を確保し、計算終了後に領域を解放するのであれば、malloc(or new)で確保、free(or delete)で解放が望ましいです。

QC++ operator演算子の動作について

下記プログラムを実行した時のoperator演算子の動作についての質問になります。
(VC++2010で動作確認)

#include <iostream>

struct UInterger
{
unsigned long ul_ui;

UInterger( unsigned long ul_value ) : ul_ui( ul_value ) {}

operator unsigned short() { return (unsigned short)ul_ui; } //(1)の時になぜ使用される?.
operator unsigned int() { return (unsigned int)ul_ui; }
operator unsigned long() { return (unsigned long)ul_ui; }
};

int main()
{
UInterger s_uin(2);

int i_temp = s_uin; // (1)コンパイルが通る.
short s_temp = s_uin; // (2)コンパイルエラー.
long l_temp = s_uin; // (3)コンパイルエラー.

return 0;
}

(2)と(3)はoperatorの定義がないためコンパイルエラーとなるのは理解できます。
(1)でなぜコンパイルが通るのかがわかりません。

下記の定義を追加しない限り、コンパイルは通らないのではと考えております…
operator int() { return (int)ul_ui; }

試しに(2)と(3)をコメントアウトしてステップ実行したところ
(1)の時に下記のunsigned short()のオペレータが使用されておりました。
operator unsigned short() { return (unsigned short)ul_ui; }

どなたか詳しい方、ご教授の程よろしくお願い致します。

下記プログラムを実行した時のoperator演算子の動作についての質問になります。
(VC++2010で動作確認)

#include <iostream>

struct UInterger
{
unsigned long ul_ui;

UInterger( unsigned long ul_value ) : ul_ui( ul_value ) {}

operator unsigned short() { return (unsigned short)ul_ui; } //(1)の時になぜ使用される?.
operator unsigned int() { return (unsigned int)ul_ui; }
operator unsigned long() { return (unsigned long)ul_ui; }
};

int main()
{
UInterger s_uin(2);

int i_temp...続きを読む

Aベストアンサー

間違っていたらすみません。私の理解だと次の通りです。

型変換の優先度は、次の通りです。
1. 型変換不要
2. 汎整数拡張 (演算時に、intより小さい変数が勝手にintに拡張されること)
3. 型変換

これを元に解説すると、
(1). intに対する代入なので、
1. operator intを探す
2. 汎整数拡張できる、intより小さい変数型へのoperatorを探す
3. その他型変換できる変数型へのoperatorを探す

という順番で解釈されます。

1.は無いので×
2.で、unsigned short型へのoperatorが見つかるので、採用する。
というわけで、(1).はunsigned shortへのoperatorになります。

(2). shortに対する代入なので、
1. operator short を探す
2. その他型変換できる変数型へのoperatorを探す

という順番で解釈されるので、
1. は無いので×
2.で、unsigned short型, unsigned long型, unsigned int型へのoperatorがそれぞれ見つかるため、
どれを採用すればいいか、わからないのでエラー
ということになります。

(3). も、(2)と同じです。

以下、余談です。
質問者さんは、(2),(3),で、1.の内容を実装することでエラーなしで実行できることを確認されたと思います。
逆に、2.で採用されるものを一つに限定する、すなわちoperator unsigned short以外を削除すれば、これまた
エラーなしで実行できるようになります。(多分

間違っていたらすみません。私の理解だと次の通りです。

型変換の優先度は、次の通りです。
1. 型変換不要
2. 汎整数拡張 (演算時に、intより小さい変数が勝手にintに拡張されること)
3. 型変換

これを元に解説すると、
(1). intに対する代入なので、
1. operator intを探す
2. 汎整数拡張できる、intより小さい変数型へのoperatorを探す
3. その他型変換できる変数型へのoperatorを探す

という順番で解釈されます。

1.は無いので×
2.で、unsigned short型へのoperatorが見つかるので、採用する。
というわけ...続きを読む


人気Q&Aランキング

おすすめ情報