(現在 過去ログ33 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■5088 / inTopicNo.1)  外部DBでオートナンバーキーの取得
  
□投稿者/ 尾形 -(2009/09/19(Sat) 18:21:27)
    よろしくお願いします
    桐9とMySQLです

    売上伝票入力です
    伝票ヘッダと伝票明細の1対Nの関係です
    伝票ヘッダのテーブルの主キーにオートナンバーを設定しています

    最後に登録(追加)したオートナンバーを取得する方法が知りたいのです
    その番号を取得して伝票明細側にも書き込みたいのです

    再抽出しないといけないのだろうというのは分かるのですが
    最後の番号を取得する#DSQLの書き方?
    良い方法が分かりません

    よろしくお願いします

引用返信 [メール受信/OFF] 削除キー/
■5091 / inTopicNo.2)  Re[1]: 外部DBでオートナンバーキーの取得
□投稿者/ 桐々舞 -(2009/09/20(Sun) 17:43:18)
    桐側で取得したらダメなのですか?
引用返信 [メール受信/OFF] 削除キー/
■5092 / inTopicNo.3)  Re[1]: 外部DBでオートナンバーキーの取得
□投稿者/ うにん -(2009/09/21(Mon) 09:37:34)
    > 伝票ヘッダのテーブルの主キーにオートナンバーを設定しています

    私はmysqlでなくpostgresqlで外部DBのautoをやろうとしましたが、
    桐で行追加可能にするには主キーがないといけない
    主キーの項目にも桐から値を設定しないと桐がNULLを入れようとする
    のでうまく行きませんでした。
    トリガを定義して何とかなりましたが、mysqlだと簡単ですか?

    > 再抽出しないといけないのだろうというのは分かるのですが
    > 最後の番号を取得する#DSQLの書き方?
    > 良い方法が分かりません

    主キー=mysql_insert_id()
    かな?
引用返信 [メール受信/OFF] 削除キー/
■5104 / inTopicNo.4)  Re[1]: 外部DBでオートナンバーキーの取得
□投稿者/ 通りすがり -(2009/09/23(Wed) 12:27:24)
    通常は主キーと外部キーは同時に書き込む訳で、何をしたいのか読めないけど、
    桐で最大値を求めれば良いんでないの

    事情でサーバーに出させたいなら、こんな感じ?
    #DSQL("ID=(SELECT MAX(ID) FROM tbl)")
    もしくは #DSQL("ID>0 ORDER BY ID DESC LIMIT 1")
引用返信 [メール受信/OFF] 削除キー/
■5116 / inTopicNo.5)  Re[2]: 外部DBでオートナンバーキーの取得
□投稿者/ 尾形 -(2009/09/23(Wed) 22:48:10)
    皆様どうもありがとうございます

    ローカル側のワーク表に入力して
    DBサーバに転送しようかと思っています

    ローカル入力→伝票ヘッダの外部DB読み込み(#DSQL(id < 0)で絞込状態)
    →伝票明細に外部キー書込→伝票明細のDB転送
    といった流れを考えています

    外部DBを触り始めたばかりです
    通常こういった処理はしないのでしょうか

    >桐側で取得したらダメなのですか?
    それでもいいのですが
    桐側にもってくる前段階の絞込条件の
    効果的なものが分からないのです

    >mysqlだと簡単ですか?
    いまのところ表画面形式で入力しています(テストのため)
    そういった事はありません
    id(主キー)は未定義でとばしていけてます
    そのため新規行追加のときはidが未定義の行が
    つづきます。再抽出しないと確認できません

    >#DSQL("ID>0 ORDER BY ID DESC LIMIT 1")
    これをしたいのですが
    LIMIT句って桐がダメじゃないですか?


    自分の基本的な考え方がダメな気がしてきました
    外部DBでの入力って普通どうするのでしょうか


引用返信 [メール受信/OFF] 削除キー/
■5118 / inTopicNo.6)  Re[3]: 式サンプルです
□投稿者/ 尾形 -(2009/09/24(Thu) 07:26:43)
    代入 &DSQL="id < 0"
    結合 "伝票ヘッダ.xvw",,表番号=1
    読み込み 表,"c:\tmp\伝票ヘッダ.tbl",*
    代入 &id= ←この段階で取得したい
    編集表 "c:\tmp\伝票明細.tbl"
    置換  [伝票id]=&id
    代入 &DSQL="id < 0"
    結合 "伝票明細.xvw",,表番号=2
    読み込み 表,"c:\tmp\伝票明細.tbl",*


    このような流れで考えているのですが
    4行目の効果的な処理が分かりません
    よろしくお願いします

引用返信 [メール受信/OFF] 削除キー/
■5119 / inTopicNo.7)  Re[4]: 式サンプルです
□投稿者/ 通りすがり -(2009/09/24(Thu) 14:51:29)
    ゴメン、まだ質問の意味が解らないorz
    しばらく検証してあげれる環境に居ないんだけど、サブクエリもLIMITも通らないの?? なんでやろ

    普通に、[ID]には桐で最大値+1を入れたらダメ?
    もちろん、#DSQL で3日以内のレコードとかに絞って入力、[ID]はイベントで良いし
引用返信 [メール受信/OFF] 削除キー/
■5120 / inTopicNo.8)  Re[5]: 式サンプルです
□投稿者/ hidetake -(2009/09/24(Thu) 15:37:20)
    2009/09/24(Thu) 15:54:57 編集(投稿者)

    > サブクエリもLIMITも通らないの??

    id の最大値を求めるには、
    表示項目名に "id" とでもし
    所属対象表は table だとして
    項目/計算式 に #max(["table".id])
    ともすれば良し!


    #DSQL を使う場合には、桐は #DSQLで渡す文字列全体を
    () で括るので
    #DSQL("ID>0 ORDER BY ID DESC LIMIT 1")
    では
    SELECT * FROM table WHERE(ID>0 ORDER BY ID DESC LIMIT 1);
    を実行してしまうことになります。

    だから
    #DSQL("ID>0) ORDER BY ID DESC LIMIT 1;SELECT (true")
    とでもしないと通りません。

引用返信 [メール受信/OFF] 削除キー/
■5121 / inTopicNo.9)  Re[6]: 式サンプルです
□投稿者/ 通りすがり -(2009/09/24(Thu) 16:59:14)
    > #DSQL を使う場合には、桐は #DSQLで渡す文字列全体を
    > () で括るので

    成る程、通らないんだね
引用返信 [メール受信/OFF] 削除キー/
■5122 / inTopicNo.10)  Re[7]: 式サンプルです
□投稿者/ hidetake -(2009/09/24(Thu) 17:14:20)
    > 成る程、通らないんだね

    そのままでは通らない。

    無理矢理通すには、SQLコマンドインジェクション攻撃に
    使われる手法を用いて、一ひねりする必要がある。
    そうすれば通せる。また、この手法を用いれば、通常は
    桐から任意のSQL文は投げかけられないけど、それも通す
    ことも可能。ただし、返り値の取得には当然制限があるの
    だけれど。

引用返信 [メール受信/OFF] 削除キー/
■5123 / inTopicNo.11)  Re[8]: 式サンプルです
□投稿者/ 通りすがり -(2009/09/24(Thu) 18:07:44)
    うん、
    ついでに教えて頂けたら嬉しいんだけど、<m(__)m>
    SQL UPDATE は、工夫したらなんとか出来る?
引用返信 [メール受信/OFF] 削除キー/
■5124 / inTopicNo.12)  Re[9]: 式サンプルです
□投稿者/ hidetake -(2009/09/24(Thu) 18:15:38)
    2009/09/24(Thu) 18:23:37 編集(投稿者)

    > SQL UPDATE は、工夫したらなんとか出来る?

    さきの例だったら

    #DSQL("ID>0) ORDER BY ID DESC LIMIT 1;SELECT (true")

    の ; のあとに割り込ませるだけ。

    #DSQL("ID>0) ORDER BY ID DESC LIMIT 1;UPDATE ・・・・;SELECT (true")
    あとは必要に応じて ; で区切って複数の文も・・・

    ただ、桐に帰ってくるのは最初の SQL文の結果のみ!
    あとの結果は、巧くいかなかった場合はエラー表示
    されるかも知れないけど、巧くいった言う結果(返値)
    は得られない?

    あとは
    http://www.fuku3.com/habata/kbbs/kakov8/21104.htm
    などを参考に!

    PostgreSQL の場合は EXECUTE コマンドがあるので
    トリガを使えば、データとして、テーブルにSQL文を
    入力すれば、それを SQLとして実行させることも一応
    可能だったりします。

引用返信 [メール受信/OFF] 削除キー/
■5125 / inTopicNo.13)  Re[10]: 式サンプルです
□投稿者/ 通りすがり -(2009/09/24(Thu) 18:21:19)
    どうもアリガト
    これは良い事を教わった(^^)
引用返信 [メール受信/OFF] 削除キー/
■5126 / inTopicNo.14)  Re[6]: 式サンプルです
□投稿者/ うにん -(2009/09/24(Thu) 19:51:45)
    > だから
    > #DSQL("ID>0) ORDER BY ID DESC LIMIT 1;SELECT (true")
    > とでもしないと通りません。

    いいね〜

    この場合たまたま最後が計算式だから
    #DSQL("ID>0) ORDER BY ID DESC LIMIT (1")
    でもいけるかな。
引用返信 [メール受信/OFF] 削除キー/
■5130 / inTopicNo.15)  Re[10]: 式サンプルです
□投稿者/ 尾形 -(2009/09/25(Fri) 07:38:34)
    どうも、ありがとうございました

    書き込む時に #乱数とPC名 あたりを書き込みして
    それを指定して再抽出して取得してみます

    要領を得ない質問で失礼しました

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■5132 / inTopicNo.16)  Re[7]: 式サンプルです
□投稿者/ hidetake -(2009/09/25(Fri) 08:22:58)
    > この場合たまたま最後が計算式だから
    > #DSQL("ID>0) ORDER BY ID DESC LIMIT (1")
    > でもいけるかな。

    PostgreSQL 7.2 だけの問題なのかわからないですけど
    コレでは通らないのですよね。

引用返信 [メール受信/OFF] 削除キー/
■5133 / inTopicNo.17)  Re[8]: 式サンプルです
□投稿者/ うにん -(2009/09/25(Fri) 16:53:04)
    No5132に返信(hidetakeさんの記事)
    >>この場合たまたま最後が計算式だから
    >>#DSQL("ID>0) ORDER BY ID DESC LIMIT (1")
    >>でもいけるかな。
    >
    > PostgreSQL 7.2 だけの問題なのかわからないですけど
    > コレでは通らないのですよね。

    色々難しいですね。8.4+桐9-2009では
    #DSQL("[日付]='2009-09-01'::timestamp) limit (1")
    で大丈夫でしたが、項目名を元表から選択すると先頭の""が合わなくなってました。

    と書いてから上を見たら、#DSQLだから[]いらないんですね。
    #DSQL("""tablename"".""日付""='2009-09-01'::timestamp) limit (1")
    でもOKだった。
引用返信 [メール受信/OFF] 削除キー/
■5135 / inTopicNo.18)  Re[9]: 式サンプルです
□投稿者/ hidetake -(2009/09/26(Sat) 07:42:54)
    > >>この場合たまたま最後が計算式だから
    > >>#DSQL("ID>0) ORDER BY ID DESC LIMIT (1")
    > >>でもいけるかな。
    >>
    >>PostgreSQL 7.2 だけの問題なのかわからないですけど
    >>コレでは通らないのですよね。
    >
    > 色々難しいですね。8.4+桐9-2009では
    > #DSQL("[日付]='2009-09-01'::timestamp) limit (1")
    > で大丈夫でしたが、項目名を元表から選択すると先頭の""が合わなくなってました。
    >
    > と書いてから上を見たら、#DSQLだから[]いらないんですね。
    > #DSQL("""tablename"".""日付""='2009-09-01'::timestamp) limit (1")
    > でもOKだった。

    PostgreSQL 8.1 でも大丈夫でした。

引用返信 [メール受信/OFF] 削除キー/
■5138 / inTopicNo.19)  Re[2]: 外部DBでオートナンバーキーの取得
□投稿者/ 桐々舞 -(2009/09/26(Sat) 16:34:19)
    サブクエリの方は通りますね

引用返信 [メール受信/OFF] 削除キー/
■5143 / inTopicNo.20)  Re[11]: 式サンプルです
□投稿者/ 通りすがり -(2009/09/26(Sat) 19:38:39)
    解決オメデト(^.^)

    > 要領を得ない質問で失礼しました
    全然んなこたぁない

    何故、サブフォーム使わないのか、きっと何か高度な状況で特殊事情がありそう、
    気軽に回答書いても後から難しい追加情報が出てきそう、って感じはしてた

    ツイデの時にでも教えて
引用返信 [メール受信/OFF] 削除キー/

次の20件>

トピック内ページ移動 / << 0 | 1 | 2 >>

[このトピックに返信]
Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -