データベースへの保存 – プログラミング – Home

通知
すべてクリア

[解決済] データベースへの保存


雪
 雪
(@雪)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

CString str;

str.Format(insert into ***(aaa, bbb, ccc, ddd)
values(%d, %d, '%s', '%s')
, m_aaa
, (*it)->m_bbb
, (*it)->m_ccc
, (*it)->m_ddd
);

Visual Studio2005MFCで作成しています。
画面に表示されたデータを保存ボタンを押して上記のようにm_aaa~m_dddをデータベー
スの***に保存しています。m_ccc以外はちゃんと保存されるのですが、m_cccだけ保存ボ
タン押下し終了した後もう一度異なるデータを保存しないと保存されません。つまり一
回遅れて保存されています。はじめの一回で他のデータと同様に保存されるようにした
いです。
お願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

これだけでわかる人はいないでしょう。

・itとは?
・m_cccとは?(型は何?CString?)
・cccにあたるデータベース上の型は?
・データベースはなに?


返信引用
雪
 雪
(@雪)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

追加です。

・itとは?
iteratorのitです

・m_cccとは?(型は何?CString?)
CString型で宣言しています

・cccにあたるデータベース上の型は?
データベース上ではchar型です

・データベースはなに?
SQLサーバー、Enterprise Manager

m_bbbとm_cccは中身は違いますが、宣言等は同じものです。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

str.Formatの直後に、TRACE(%s\n, str.c_str());を追加してみて。
念のため。あとはBlueさんのご指摘どおり。

# 2005は使ったことがないので、別のマクロがあるのかもしれないが。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>iteratorのitです
んなことは、名前から予測できましたけど。
そのiteratorの型はなんなのか?ってことを聞きたかったわけで。
おそらく、

std::vector<XXXX>::const_iterator

ってな感じだと思いますが。

>・cccにあたるデータベース上の型は?
>データベース上ではchar型です
ちなみに、おなじ文字列を入れている ddd の型は何でしょうか?

たいちうさんもおっしゃっていますが、実行前にどんなSQL文になっているのか
確認してみてはどうでしょうか?
>TRACE(%s\n, str.c_str());
は違うような。。。

TRACE1(%s\n, str);

として、デバッグ実行してアウトプットウィンドウにどんな文字が出力されているか
確認してください。
(よくわからなければ、AfxMessageBox(str);で確認してもいいです。)


返信引用
雪
 雪
(@雪)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

>>iteratorのitです
>んなことは、名前から予測できましたけど。
>そのiteratorの型はなんなのか?ってことを聞きたかったわけで。
>おそらく、

>std::vector<XXXX>::const_iterator

>ってな感じだと思いますが。

名前の異なる同じような型です。

>>・cccにあたるデータベース上の型は?
>>データベース上ではchar型です
>ちなみに、おなじ文字列を入れている ddd の型は何でしょうか?

dddの型も同じchar型です

>TRACE1(%s\n, str);
>AfxMessageBox(str);

二つで確認した所、
insert into ***(aaa, bbb, ccc, ddd) values(1, 1, 12345 , 1234)
の出力でした。数字は全て期待通りなのですが、問題のcccの値だけ後ろにスペースが入
っていました。これが原因ですか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>insert into (aaa, bbb, ccc, ddd) values(1, 1, 12345 , 1234)
これ本当でしょうか?
の対応が間違っているような。。。
それと ' で囲われなくなっているし。

>str.Format(insert into (aaa, bbb, ccc, ddd)
> values(%d, %d, '%s', '%s')
であれば、

insert into ***(aaa, bbb, ccc, ddd) values(1, 1, '12345', '1234')

となるはずなんですが。

>char型です
char型に文字列入れれるのでしたっけ?

CHAR(5)

とか文字数はないのでしょうか?

ちなみに、どうやってSQL文を実行していますか?
ADO?


返信引用
雪
 雪
(@雪)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

すいません。

insert into ***(aaa, bbb, ccc, ddd) values(1, 1, '12345 ', '1234')
でした。正確に書かなくてはいけないのにすいません。

>CHAR(5)
>とか文字数はないのでしょうか?

cccの方がchar(11) not null,
dddの方がchar(16) not null,です。

>ちなみに、どうやってSQL文を実行していますか?
>ADO?

その辺は不明です。他のものを参考にしながらですので。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

うーむわからんなぁ。。。
>not null
ならちゃんと更新されるはずなんだけれど。
もしかして、コミットしていなくて、遅れて更新しているように見えるだけとか。
すべて INSERT し終わったらコミットして全てのレコードを確かめていますか?

コミットしていないものを 見て出来ている/出来ていない の確認はどうなんでしょう
か?
まぁ、コミットしちゃうとロールバックできないので一概に同とも言えないと思うけ
ど。


返信引用
雪
 雪
(@雪)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

直前の情報を確認してみた所、
insert into (aaa, bbb, ccc, ddd) values(1, 1, '12345 ', '1234')
ではなく、
insert into
(aaa, bbb, ccc, ddd) values(1, 1, ", '1234')

とcccに値が入ってない状態でした。cccへの代入をしっかりすればできそうです。
でも二回目の起動で前回の値が入っているということはどうにかなるんじゃないですか
ね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> とcccに値が入ってない状態でした。cccへの代入をしっかりすればできそうです。
型を確実に合わせないと駄目です。

>でも二回目の起動で前回の値が入っているということは
>どうにかなるんじゃないですかね。
「2回目の起動」で確かめるのではなく、ソフトで書き換え後
データ表示ソフト(SQLサーバならあると思うのですが)
で確かめないと駄目です。


返信引用
m
 m
(@m)
ゲスト
結合: 21年前
投稿: 23
 

×(*it)->m_ccc
○(LPCSTR)(*it)->m_ccc


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>○(LPCSTR)(*it)->m_ccc
こんな過去ログがありました。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200504/05040059.txt

もしキャストが問題であれば、なんで (*it)->m_ddd の値だけ入るんでしょうかね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

SQL文によって代入される変数は、キャスト出来ないと思います。
今回の場合INSERT文ですから、一度データベース変数の型と同じ型の
変数に代入してから(ここでキャストするのはいいと思います。)
SDKの関数だと「SQLBindCol」でセットしないと駄目だと思います。


返信引用
雪
 雪
(@雪)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

無事解決しました。

おそらく原因はクラスAとクラスBにm_cccがあってしかもポインタとかがゴチャゴチャ
になっていたのからかもしれません。
データベース保存する所できちんと整理して組み立てて、m_dddが保存されない時は
m_cccも空白になるようにしたので解決しました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました