HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
1004
タッチペンHSP上で、sqleleのDBをアタッチする方法5解決


タッチペン

リンク

2018/10/4(Thu) 17:55:08|NO.85504

 初学的な質問ですみません。
 HSP3.5 "sqlele.hsp"に関する質問です。

--
 平常時の処理を高速化する目的で、通常の処理はオンメモリの領域(sql_open ":memory:")で処理し、

 データを保存、読み出しするときだけファイルのDB hogeをアタッチしてテーブル単位でコピー
 (例:Create table sample.hoge select * from sample.:memory:)する方法を検討しています。

 が、:memory:にファイルのDB hogeをアタッチする段階でつまずいてしまっています。
--
 (sql_open "hoge")としてしまうと":memory:"インスタンスを手放してしまうようなので
 (sql_q "ATTACH 'hoge.db'")などとしてみたのですが、うまくいく気配がありません。

 ":memory:"上のデータを配列変数に控えてから(sql_open "hoge")して書き込むしかないでしょうか?

--
 HSPTV!での検索も(sqlele)(ATTACH)などのワードではイマイチヒットしないので
 sqlele関連で有益なサイトをご存知であれば併せてご教示いただけると幸いです。



この記事に返信する


Velgail

リンク

2018/10/4(Thu) 21:51:12|NO.85506

メンテナンスしてないんで(3年前かよw)ちょっとアレですし、ノークレームでお願いしますが、
こんなモジュールを作ってました。
http://hsp.tv/play/pforum.php?mode=pastwch&num=67472

一応これを使うと同時にアタッチが可能になります。



タッチペン

リンク

2018/10/5(Fri) 02:00:13|NO.85507

 Velgailさん、ご返答ありがとうございます!

 モジュールをダウンロードし、ドキュメント等々は拝読したのですが
 複数開いたDBに識別子を与える・確認する方法が分かりません。
 DB間でデータを送受するにはどのようにすればよいでしょうか。
--
 モジュールに添付いただいているSample.hspで例えると

 db(0)のtestテーブルからdb(1)のtestテーブルへ
 db(0)側が持つ全2レコード[Name:Reef,Lv:7][Name:Christina,Lv:10]を送りたいとき

 query@sql db(1),"Insert Into test.db(1) Values(name,lv) Select name,lv From test.db(0)"
 のようなクエリ一発で送れるかと期待しているのですが

 test.db(1)、test.db(0) という指定では(当たり前ですが)DB識別子に問題がありsqlサイドでエラーを吐きます。
--
 上の例では「IDカラムに自動採番振ってないから別のエラーが出るよ」とかいうツッコミをいただきそうですが


 実は今回の問題にぶつかりGoogle検索した時点で、このモジュールの存在は存じ上げていたのですが
 上述のような相談事がいくつかあり、また連絡先が分からず仕様の確認等が難しそうなので
 導入を諦めておりました。

 紹介いただいたモジュールは大変勉強になりますが、レスでも「ノークレームで」と念押しをいただいておりますし
 スレッドは未解決のままとさせてください。

 長文すみません



Velgail

リンク

2018/10/5(Fri) 23:05:56|NO.85513

普通にできるけどコレじゃダメなの?(objectiveの方ではないです)

#include "sqlele.hsp" sql_open ":memory:" sql_q "create table test(name, lv);" sql_q "insert into test values(\"ALISA\",10);" sql_q "insert into test values(\"BRIAN\",15);" sql_q "attach database 'testsave.db' as new;" sql_q "create table new.test(name, lv);" sql_q "insert into new.test(name, lv) select name, lv from main.test;" sql_close



タッチペン

リンク

2018/10/6(Sat) 20:44:50|NO.85520

 Velgailさん、改めてご回答ありがとうございます!
 返信が遅くなりすみません。

 ご教示いただいた方法で問題なくアタッチできました。

 (Table).(DB)ではなく(DB).(Table)でしたね。
 初歩的な質問で本当に失礼しました。以後気を付けます。



Velgail

リンク

2018/10/6(Sat) 23:27:32|NO.85521

>初歩的な質問で本当に失礼しました。以後気を付けます。

大丈夫です。15分悩んでわからなかったら質問しましょう。
その後仮に試行錯誤で自己解決したら、わかったことを追記して解決済みにしておきましょう(後進の助けになります)

行き詰まったらどんどん質問してくださいね。



ONION software Copyright 1997-2018(c) All rights reserved.