SQLite 4 ..
[2ch|▼Menu]
175:nobodyさん
06/12/01 21:53:08
お聞きしたいことがあります。
フィールドではなく、テーブル全体で一意の要素というのを設定したい
のですが、そういう場合はどうすれば良いのでしょうか?

例えば、A、B、C、Dフィールドがあったとして、Aをプラ
イマリキーにします。しかし、Aで使われている要素は、Aの
中ではダブることはありませんが、他のフィールドでは使えま
すよね?それを無しにしたいのです。
同様に、フィールド-Bで一度使われた要素は、A,C,Dでも使えない
ようにしたいと思っています。





176:NAME IS NULL
06/12/01 22:06:29
>>175
つ [再設計]

177:nobodyさん
06/12/01 22:15:49
>>176
いえいえ、不可欠なことなのです。

178:NAME IS NULL
06/12/01 22:20:32
>>175
フィールド名(A,B,C,D)とその値というようなテーブルに設計を変更する
他の情報があるなら必要に応じてjoinすればよろし

179:NAME IS NULL
06/12/01 22:21:31
>>177
不可欠である理由をちゃんと書いたほうが的確なアドバイスが得られやすいだろう

180:NAME IS NULL
06/12/01 22:30:26
>>175
そういう特殊な制約は、普通はトリガーを使って実装しますが、
残念なことにSQLiteの貧弱な機能ではそこまでのことは
実装できません。他のまともなデータベースサーバーに
変更することをお勧めします。

181:NAME IS NULL
06/12/01 22:35:13
結局>>180が言いたいだけの自演厨か。
設計で逃げられないような腕の奴はどんなDBMS使っても駄目なのにね。w

182:180
06/12/01 23:17:33
涙目になるなw

俺は断じて間違っていることは言っていない。

183:NAME IS NULL
06/12/01 23:55:59
TRIGGER って良く知らないんだけど、これではできないの?
URLリンク(www.sqlite.org)

184:NAME IS NULL
06/12/02 01:23:10
トリガーで設計の愚かさを補いたい人はそういうDBを使うのが良いだろうね。
そんな奴の設計したシステム使いたくないけど。

185:NAME IS NULL
06/12/02 01:55:52
別にフィールド作ってそこをキーにして
ABCDの入れたいとこに同じ値を入れればいいんじゃないの?

186:NAME IS NULL
06/12/02 02:35:38
>>185
それこそ変な設計だろ。
制約のためだけに変なテーブル作るな。

187:NAME IS NULL
06/12/02 08:33:59
ぜんぜん許容範囲

188:NAME IS NULL
06/12/02 10:26:22
バックアップしてるって言うけど、リストアしたこと無いって香具師なら居たな。
漏れの職場。orz

VB使ってるなら普通にアクセス使ってるってのと同レベルだ。
PHPだから、SQLITEって根拠としては薄い。
むしろ貧乏で専用鯖借りられないから、仕方なくSQLITE使ってますってのは本当の理由でしょ。

189:NAME IS NULL
06/12/02 10:35:36
ロリポみたいな格安鯖だとMySQLの鯖が死ぬほど重くてSQLiteの方が速いってのもある

190:NAME IS NULL
06/12/02 10:52:10
アクセスネタ飽きた。

191:NAME IS NULL
06/12/02 11:06:23
漏れも飽きた。

192:NAME IS NULL
06/12/02 11:16:37
2chビューアとかにSQLite内蔵されてるけど、
これをアクセスやMySQLで置き換えてプロダクトとして成立すんのかと。

193:NAME IS NULL
06/12/02 12:22:07
>>192
マジレスすんなよ。

194:NAME IS NULL
06/12/02 12:29:33
このスレ不毛な議論に何ヶ月も費やしてるよな。
2chなんてそんなもんだから別にいいけどさ。

195:NAME IS NULL
06/12/02 13:21:48
>>190
つか、そもそも最初から相手にしていない。

196:NAME IS NULL
06/12/02 23:05:21
俺データベースの勉強最近始めて思ってたんだけど
フィールド=テーブルだろ?
ならテーブルといえばいいじゃん
なんでわざわざ2通りの言い方で表記すんの?
create fieldなんてないんだからテーブルと言えよ。
フィールドって言い始めた奴ってアホだろ。

197:NAME IS NULL
06/12/02 23:37:23
フィールド=列
>>196はアホ

198:NAME IS NULL
06/12/02 23:46:10
>>196
もっと勉強しろ。もっともっと勉強しろ。
今のお前は間違いなくアホだ。
悔しかったらもっと知識と経験を積め。
頑張れ。

199:NAME IS NULL
06/12/03 00:50:10 5Q8SnX/z
>>197
フィールド=行
カラム=列

アホは死んでいいよ

200:NAME IS NULL
06/12/03 00:58:35
>フィールド=行

( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

(つд⊂)ゴシゴシ
  _, ._
(;゚ Д゚)

201:NAME IS NULL
06/12/03 01:41:14
まあ2chで正確な定義を調べようというのが間違いだなw

202:NAME IS NULL
06/12/03 02:47:41
フィールド 欄
レコード 行
カラム 列

なんなんだよ、このスレは!

203:NAME IS NULL
06/12/03 06:41:45
なんだ

データベースのスレだからスゲー猛者がいるのかと思ったら
誰もわかってねーんじゃんwww

>202
だから欄=テーブルのことでしょ?

〜欄(テーブル)の何個目(レコード)の項目名(カラム)で
一つの値を取得するわけだろ?

204:NAME IS NULL
06/12/03 09:35:46
>>203
釣りか?
つりだよな、釣りだといってくれ

205:NAME IS NULL
06/12/03 09:37:56
釣りじゃなくて大馬鹿でいいんじゃね?
もし大馬鹿と思われたくないって考えてたら釣りだと自白してくるはず。

206:NAME IS NULL
06/12/03 10:45:24
>>197>>199あたりは釣りかもしれんが、>>196>>203は天然だとみた

207:NAME IS NULL
06/12/03 10:58:48
>196=>203と同じ主張をしている天然が後輩にいるんだが……
本人ではありませんように。

208:NAME IS NULL
06/12/03 11:04:18
本とか読んだこと無いのか?
入門書の最初に書いてあるから本屋で立ち読みでもしてからこいや。

/*
その辺が抜けてると、「フィールドに入れて」の表記も
カラム=フィールドって事になってしまう罠。
*/

209:NAME IS NULL
06/12/03 11:36:16
URLリンク(www.oracle.co.jp)

オラクルでは
・表(テーブル)
・行(ロー、レコード)
・列(フィールド、カラム)
みたいだな

210:NAME IS NULL
06/12/03 11:43:08
リレーション = テーブル = 表
タプル = レコード (正確にはレコード オカレンス) = row = 行
アトリビュート = カラム(列) = フィールド

アトリビュートの集合がタプル(レコード)、
タプルの集合がリレーション(テーブル)。

……だったかな?

211:NAME IS NULL
06/12/03 11:55:56
>>210
お前リレーションって言葉の意味わかってるか?


212:NAME IS NULL
06/12/03 13:24:15
>>211
210じゃないがわかってるように見えるが…?
#テーブル間のリレーションシップのこととは違うのよ?

213:NAME IS NULL
06/12/03 14:25:54
>>212
心配になって辞書を引いてみたが、意味は関係、つながりとのこと。
少なくともテーブルのことでは無さそうだが、聡明な>>212氏は何か別の解釈があるというのか。

214:NAME IS NULL
06/12/03 14:29:45
いや、用語に突っ込まれても・・・。
リレーションは、関係モデルにおけるテーブルに相当する概念ですよ。
データベースの教科書を参照してください。

215:NAME IS NULL
06/12/03 15:29:09
リレーションはイコールでテーブルにはならないよ
なに習ってきたんだよ

216:NAME IS NULL
06/12/03 17:08:53
>>214
URLリンク(www.google.co.jp)

「リレーションとは」でぐぐりました。
どの説明を読めば良いんですか?w

217:NAME IS NULL
06/12/03 17:29:53
もうこのスレはデータベースお勉強スレにしちゃえばいいんじゃない?

218:NAME IS NULL
06/12/03 18:51:42
まぁデータベースお勉強スレ化を促進しても何なんだが
……「確信犯」とか「役不足」みてーなもんかなぁ……

>214
Googleでトップに来てりゃ正しいってもんじゃない。
とりあえず俺が表示したときに上位にあったleasekin.comとshophia-it.comの説明はスカタン。
「リレーション」という用語を知ってれば「リレーションシップ」をリレーションと略すなんて
絶対やらんと思うが……
どの説明を読めばいいのか、というならgihyo.co.jpのPDFの奴(「データベースの基礎」)読んどけ。

219:NAME IS NULL
06/12/03 18:52:32
……言ってる俺がスカタンやらかしてどーするorz
×>214
○>216

220:NAME IS NULL
06/12/03 19:03:22 OtD4KG5A
>>218
英和辞典見ましたか?、
リレーションとリレーションシップの違いは何ですか?

221:NAME IS NULL
06/12/03 19:05:16
>>218
その本が間違ってるんですよw

で、その間違った本のアドレスは?

222:NAME IS NULL
06/12/03 19:07:57
>>221
その本に失礼だ。
本当は>>218が間違って解釈しているんだ。

それを知られたくないから、証拠のPDFの具体的な場所をいえないと
考えればつじつまがあう。

223:NAME IS NULL
06/12/03 19:14:22
↓これ以降DBの基礎知識ない人は入場禁止↓

224:NAME IS NULL
06/12/03 20:43:49
……何をここまで必死になってるのか分からんが

URLリンク(www.gihyo.co.jp)

225:NAME IS NULL
06/12/03 21:09:27
そーいや>>196=>>203はどこに消えたんだ。
自分の無能さに嫌気が差して首吊ったのかな?

226:NAME IS NULL
06/12/03 23:48:44
MySQLのほうが便利だな。分散構成も取れるし。

227:NAME IS NULL
06/12/03 23:56:13
きっちりソースまで提示した>>212=>>214=>>224に対して、
己の無知を晒しただけのSQLite使い達無様杉ww

228:NAME IS NULL
06/12/04 16:18:19
sqlite2を使ったCのプログラムをsqlite3に移行したいんだけど、
いいドキュメントないかなぁ…。

sqlite_set_result_string()やらsqlite_create_function()やらの
sqilte3では消えた関数をどう代用すればいいのか、よくわからん。

229:NAME IS NULL
06/12/04 16:43:45
ちょっと気になって調べてみたけど、wikiぺディアに分かりやすい解説あるじゃん。
Wikipedia項目リンク

抜粋すると、“リレーション”ってのは、RDBの基礎理論「関係モデル」における“関係変数”の事で、
これがRDBにおける“テーブル”の基礎になってるって事でいいのかな?

モデル理論とか、ちゃんと勉強してなかったから知らんかったよ。
今度本買ってこよ。

230:NAME IS NULL
06/12/04 20:19:40
そこを読めばリレーション=テーブルじゃないことくらい理解できるだろ


231:NAME IS NULL
06/12/04 21:38:20
>>229
そのページの図だと
Relation variable(Table name)
Relation(Table)
となっているな。
「理論の用語では」リレーション=テーブルと言っていいんだろうと思う。

ただ、関係の集合は直積や和や射影などの演算について閉じているという
重要な性質があって、現実のRDBだと、
「SELECT文の結果セット」が「リレーション」に近いイメージなんだよな。

SELECT文によってそうした関係演算は実現できて、結果セットは確かに
カラムと行からなる「リレーション」と言えるし、その結果セットに対して
さらに再帰的に関係演算を適用することも出来るんだが、
それは現実のRDBで言うところの「テーブル」とは異なるものだからな。

232:NAME IS NULL
06/12/04 21:46:40
確かにテーブルはリレーションじゃが、この広い地球上にはテーブルでない
リレーションもあるのじゃよ。

233:NAME IS NULL
06/12/04 22:01:28
>>232
理論ではそれを区別して無いのかと思ったのだが、違うのかな。
実装で区別されてしまうだけで。

逆に言うと、理論では「テーブル」の定義は何なの?

234:NAME IS NULL
06/12/04 22:08:37
>>233
理論はひとつではない。教科書によって用語が違うくらい日常茶飯事。
普通はどうよ、と言われれば、テーブルはSQL的な意味でのtableを指すのが一般的。

235:NAME IS NULL
06/12/04 22:41:10

テーブル≠リレーション

一つのテーブル内に納まらないリレーションがあるだろ

236:NAME IS NULL
06/12/04 22:48:12
どこまでアクセスの話をしてるのかと。

DBMS使いにとってのリレーションは、テーブル間のリレーションであって、
アクセスでどう定義されてようがどうでもいい。
>>210-235はアクセススレに池。

237:NAME IS NULL
06/12/04 23:08:13
テーブル⊂リレーション、と俺は理解してみたのだが、俺の理解なんてホントどうでもいい。

238:NAME IS NULL
06/12/04 23:15:54
一つのテーブルに納まった要素同士のリレーション
テーブル間のリレーション

これらはまったく別のこと

リレーション=テーブルではない

239:NAME IS NULL
06/12/05 08:49:21
テーブルはリレーション
ビューもリレーション

240:NAME IS NULL
06/12/05 11:23:20
おまえら違うスレ行けよ

241:NAME IS NULL
06/12/05 15:22:33
>>228
URLリンク(hp.vector.co.jp) の2.3

Ver3系しか使ったことない新参なんでVer2系のAPIも調べてみたけど、
集約関数作成は専用のがあったんだな。
DBD::SQLiteでドライバのメソッドが分かれてるのはVer2系の名残か。


242:NAME IS NULL
06/12/05 16:38:05
>>241
Thanks。
引数が文字列のポインタからsqlite3_value構造体へのポインタに変更されて、
そのまんま代用は出来ないのか…。ソースを結構書き換える必要が出るなぁ。

243:NAME IS NULL
06/12/06 11:54:56
そういえば、 SQLite2 では sqlite_exec() がメインで、
各行の処理はコールバック関数で実行するようになっていたのが、
SQLite3 では sqlite3_step() というステップ処理 API を利用するのがメインで、
sqlite3_exec() はそれの単なる wrapper API になってしまったので、
2 から 3 へ移行したときにそこらへんをごっそり書き換えしたような記憶が
かすかにあるようなないような。

244:NAME IS NULL
06/12/06 20:41:12
リレーション(笑)

245:NAME IS NULL
06/12/07 06:43:26
おまいらアクセス使っとけ(w

246:NAME IS NULL
06/12/07 15:39:30


 ファイルメーカー信者の俺様が来られましたよ



247:NAME IS NULL
06/12/07 18:52:27
いやいやそういうスレじゃないから。

248:NAME IS NULL
06/12/08 00:37:36
今度はマカか。氏ね!

249:NAME IS NULL
06/12/08 00:52:39
>>248
またおまえか

250:NAME IS NULL
06/12/09 08:32:13
マカって腐ったリンゴだしなあ。

251:NAME IS NULL
06/12/12 22:20:21 7FrU/r+b

VB2005から使ってみたいんだけど、ODBCとかなにかツールはあるの?

252:NAME IS NULL
06/12/12 22:31:58
SQLite ODBC Driver
URLリンク(www.ch-werner.de)

253:NAME IS NULL
06/12/13 10:03:55
>>251
SQLite ADO.NET 2.0 provider
URLリンク(sqlite.phxsoftware.com)

今、こいつと C# で開発中。

254:251
06/12/13 23:01:22 VQL+RvgD
>>252 253

ご紹介ありがとうございます。

でも英語は超苦手で、目の前に宝の山がありそうなのに見つけられない自分が悔しい…


255:NAME IS NULL
06/12/13 23:11:45
>>254
英語云々で諦めるのならそれは貴方にとっては宝ではなくすっぱい葡萄なのでは?


256:NAME IS NULL
06/12/13 23:41:53
一応、義務教育で英語教えてるんだから、あとは本人の熱意だよな

257:NAME IS NULL
06/12/14 00:13:17
VBからなら最初はMDBとかMSDEのほうが楽だよ。

義務教育英語ってほとんど意味ないけどな。
義務教育で国語習っても、ビジネスマナーの日本語は難しい。

258:NAME IS NULL
06/12/14 01:28:40
>>255 諦めてないから「宝の山」なんでは?

>>256 御意

>>257 MDBもMSDEもMySQLもPersonal OracleもOracle Liteも経験済み。
   組み込み型で軽くて安くてファイルサイズ制限の緩いDBMSが欲しいのさ。

259:NAME IS NULL
06/12/14 03:13:06
>>257
義務教育ごときで及第点取れない奴に限ってそういうことを言うよねw

260:253
06/12/14 09:06:35
SQLite のスレッドでこんなことを書くのもヘンだが、Firebird Embedded
Server も面白そうだ。もっとも Firebird は英語、日本語ともにドキュメントが
少なくて、SQLite 以上に苦労すると思うけれど。

261:NAME IS NULL
06/12/16 19:52:33
義務教育で優秀なら日本語じゃなくて英語でカキコすれば良いのに(w

262:NAME IS NULL
06/12/16 20:32:05
そしたら>>261は読めないから
かわいそうに思ってなw

263:NAME IS NULL
06/12/16 20:55:37 cyQwrL5b
PHP5.2
PDO_SQLite1.0.1
SQLite3.3.7

でデータベースのATTACHが出来ないんだけど俺だけ?バグ?仕様?

 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $pdo->query("ATTACH DATABASE 'db2.sqlite3' AS db2;");
$stmt=$pdo->query('select * from db2.hoge;');
while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
var_dump($result);
}
でstring(64) "SQLSTATE[HY000]: General error: 1 no such table: db2.hoge"
例外が出る。
sqlite_master見てもdb2データベースは出来てないみたい。

Attachはあきらめて他の方法を探るべき?

264:NAME IS NULL
06/12/16 21:01:42 UIPLZeNb
ここに「うんこぉ!」と書き込んでください
スレリンク(cat板)l50
幸せになれますよ。



265:NAME IS NULL
06/12/16 22:08:09
>>261
義務教育受けたのに英語使えない奴はただの馬鹿だけど、日本で日本人相手に
英語使う奴はキチガイだと思わないか?

266:NAME IS NULL
06/12/16 23:49:39
>>265
下らん事で熱くなるな。

267:NAME IS NULL
06/12/17 00:25:15
つまり日本に居るのに英語の義務教育で優秀だった香具師は基地外ってことですね。
無駄なことしてたって自覚すらないとか?

268:NAME IS NULL
06/12/17 00:32:28
>>267
鎖国は終わりましたよw

269:NAME IS NULL
06/12/17 01:09:02
つーか日本人(ないし日本語を常用するであろう人間)が英語圏産のDBについて語るスレで
日本語だ英語だと何をこだわっとるのか

270:NAME IS NULL
06/12/17 02:31:31
英語だからという理由でドキュメント読まない馬鹿が沸くからだろ

271:NAME IS NULL
06/12/17 03:19:08
>>263
なんでアタッチした直後にエラーチェックを入れないの?

272:NAME IS NULL
06/12/17 03:46:54
日本人はアクセス使ってれば良いんだよ。
日本語ヘルプも完備だ。

273:NAME IS NULL
06/12/17 03:58:18
アクセス厨は専用スレあるんだからこっちへ逝け。

【Access】アクセスは最強のデータベース!
スレリンク(db板)

274:NAME IS NULL
06/12/17 12:21:08
みんなでアクセス(mdb)を使おうぜ。

275:NAME IS NULL
06/12/17 12:26:16
やだよ

276:NAME IS NULL
06/12/17 14:28:28
>>274
すれ違い。

277:NAME IS NULL
06/12/17 16:20:49
知ってる

278:NAME IS NULL
06/12/17 20:20:08
もうsqlite使ってる香具師は居ないんじゃない?

279:NAME IS NULL
06/12/17 21:36:34
firefox2.0使ってる奴は既にsqlite使いですが何か?

280:NAME IS NULL
06/12/17 22:24:49
MT使ってる人でSQLiteは多いかもな
レンタル鯖の関係でSQLiteのバージョンは2だったけど何ら問題ない

281:NAME IS NULL
06/12/18 04:26:04
sqliteは使いやすいからねぇ。ヲレ的にはBerkleyDBのほうが
好きだったりするんだけど。SQL使えんけど。

282:NAME IS NULL
06/12/18 19:50:05
Btrieveを忘れないでください・・・

283:NAME IS NULL
06/12/18 20:45:36
BDBとか、よくぶっ壊れるからお話にならんだろ。

284:NAME IS NULL
06/12/18 23:46:40
SQLite の壊れるネタで相手にされなくなったら今度は BDB かよ。懲りないねえ。

285:NAME IS NULL
06/12/18 23:55:52
どんなものでも壊すことのできる特殊能力の持ち主かもしれないね

286:NAME IS NULL
06/12/19 00:33:36
……もしや龍宮城之介?

287:NAME IS NULL
06/12/19 00:34:27
まぁ、BDBが評判悪いのは事実だけどな。
Subversion、OpenLDAPなど、ちょっと調べるとソースはたくさん見つかる。

288:NAME IS NULL
06/12/19 01:24:06
BDBはSQLite以上にDBファイルやAPIの互換性に欠けるからなぁ。

289:NAME IS NULL
06/12/19 06:34:37
はいはい、2と3で互換性無いのと、DBファイル壊しまくりなのを自ら認めましたね。
やっぱりBDB使ってる無料ソフトのSQLiteって商用ソフトのアクセスより駄目じゃん。

290:NAME IS NULL
06/12/19 08:56:53
>>289

291:NAME IS NULL
06/12/19 10:35:40
SQLiteはBDBとやらには全く依存してない。

292:NAME IS NULL
06/12/19 17:41:44
>>289
気が狂うってどういう気分?

293:NAME IS NULL
06/12/19 18:28:25
BDB使ってる無料ソフトのSQLiteってなんのこと?wwww

294:NAME IS NULL
06/12/19 18:37:44
        ∩___∩                     ∩___∩   
    ♪   | ノ ⌒  ⌒ヽハッ    __ _,, -ー ,,    ハッ   / ⌒  ⌒ 丶| 
        /  (●)  (●)  ハッ   (/   "つ`..,:  ハッ (●)  (●) 丶 ♪BDBがSQLiteで使われてるって
       |     ( _●_) ミ    :/       :::::i:.   ミ (_●_ )    |  勘違いするのってどんな気分?     
 ___ 彡     |∪| ミ    :i        ─::!,,    ミ、 |∪|    、彡____    
 ヽ___       ヽノ、`\     ヽ.....:::::::::  ::::ij(_::●   / ヽノ     ___/
       /       /ヽ <   r "     .r ミノ~.    〉 /\   丶      
      /      /    ̄   :|::| 恥馬 :::| :::i ゚。     ̄♪   \    丶    
     /     /    ♪    :|::|    ::::| :::|:            \   丶     
     (_ ⌒丶...        :` |    ::::| :::|_:           /⌒_)     
      | /ヽ }.          :.,'    ::(  :::}            } ヘ /        
        し  )).         ::i      `.-‐"             J´((
          ソ  トントン                             ソ  トントン


295:NAME IS NULL
06/12/19 19:44:42
>>289
一回死んでやり直したら?

296:NAME IS NULL
06/12/19 20:55:41
>>289
www

297:NAME IS NULL
06/12/19 21:14:40
アクセスとやらを使っている奴の知識レベルを垣間見れて実に有意義だったw

298:NAME IS NULL
06/12/19 21:49:33
わからないのに無理に会話に参加しようとするから自爆するんだよw

299:NAME IS NULL
06/12/19 22:52:07
大量だな。ヴァーカw

300:NAME IS NULL
06/12/20 00:34:31
    大量だな。ヴァーカw│
      ──y─┘

       ・゚・。 ○ノノ。・゚・
    ~~~~~~~~~~│~~~~~~~~~~~~~~~
          ト>゚++< ミ パクッ
     ジタバタ ハ
        ノ ノ

301:NAME IS NULL
06/12/20 00:37:54
大量

302:NAME IS NULL
06/12/20 11:51:47
もしかして大漁と言いたかったのかな。

303:NAME IS NULL
06/12/20 13:59:49 IGadmlEt
VS2005 + ADO.net Data provider for SQLiteを使って開発してるんだけど、
Data Sourceに相対パスを指定するとうまくいかない。
Data Sourceに指定するパスのカレントパスが、
* VS的には、ソリューションのルートディレクトリ(*.sln がある場所)
* バイナリ的には、System.Data.SQLite.dll のあるディレクトリ
になってるみたい。コネクションストリングに "Data Source=data.db"を
指定すると、

VSのサーバエクスプローラのデータ接続などでは、
foobardir\solution1\data.db
を見に行くし、

デバッグ時には、
foobardir\solution1\bin\Debug\data.db
を見に行ってる。

VS2005のIDEの問題なのか、ADO.net Data provider for SQLiteの問題なのか
わかんないけど、何か分かることがあったら教えてください。
絶対パスによる指定、は無しでお願いします。

304:303
06/12/20 14:04:20 IGadmlEt
要するに、Data Sourceに相対パスを用いて、VS2005のDBに関する便利な機能を使うには、
どうしたらよいか、ということです。わかりにくくてすみません。


305:NAME IS NULL
06/12/20 14:47:00
VSのスレで聞いたほうがよさげ

306:NAME IS NULL
06/12/20 15:34:23
Data Sourceの解釈はデータプロバイダに
まかされているはずだから、
System.Data.SQLite.dllの問題だとは思うが・・・
VSのスレは関係なさげ

307:NAME IS NULL
06/12/20 15:36:25
これ?ぜんぜんよんでませんw

URLリンク(sqlite.phxsoftware.com)
> You can now specify a relative path in the Compact Framework's "Data Source" by prefixing the file with ".\". i.e. "Data Source=.\\mydb.db3"

308:303
06/12/20 18:10:49 IGadmlEt
だいぶスレ違いっぽいのだけれど。。。

よくわからんのだけど、
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
にDBのファイルが出来ることもある。事前条件がわからんけど。
最新版 System.Data.SQLite.dll のソースコード、SQLiteConnection.cs の
920行目の AppDomain.CurrentDomain.BaseDirectory があやしげ。

てか、VSから見てるDBのドライバは、GAC の System.Data.SQLite.dll
なんだから、開発対象のバイナリの在処なんて知ったこっちゃない悪寒。
てことは、開発時には Data Source は絶対パス指定にしておいて、
リリース直前で相対パスに替えるしかないのかなあ。。。うーむ。

309:303
06/12/20 18:14:29 IGadmlEt
>>307
レスありがとうございます。
in the Compact Framework's って言ってるので、ちょい違うみたいです。
って、Fullバージョンの .net Framework を対象に開発してることを、
最初に断っておかなければなりませんでした。すみません。

310:NAME IS NULL
06/12/20 19:07:07
>>303
しばらくVS使ってないんだが、プロジェクトでバイナリの実行パスを設定出来なかったか?


311:303
06/12/20 19:54:37 IGadmlEt
>>310
できますね。(開始オプション→作業ディレクトリ ですかね?)
仰っているのは、(VSの実行パスはどうにもならんから、)プロジェクトの実行パスを
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE ( $(DevEnvDir) )
にしてしまえ、と言うことでしょうか。

困ったことに、Data Sourceのカレントディレクトリが、 $(DevEnvDir) だったり、
$(SolutionDir) だったり、再現性が今ひとつよくわかっていないのです。

312:NAME IS NULL
06/12/20 20:00:13
Data Sourceの相対位置って普通にカレントディレクトリからの相対位置じゃないの?
だからカレントディレクトリをプログラムの実行ファイルの場所に移動すればいいだけじゃないの?

313:303
06/12/20 20:55:41
>>312
恐らく、その「カレントディレクトリ」というやつが、コンテキストによって
違っているため、今の状況になっています。
ビルドされて出てきたバイナリは、想像どおりの「カレントディレクトリ」を
起点にしてくれます。その一方VS経由では、(恐らく)VSの実行ファイルがGACの
System.Data.SQLite.dll を呼び出す形になっているため、VSの実行ファイル
そのものがあるディレクトリを「カレントディレクトリ」としているようです。

314:NAME IS NULL
06/12/20 23:04:21
おまいらアクセス使ってるなら、ODBCでMDB使えよ(w

315:NAME IS NULL
06/12/20 23:19:45
だからアクセス使ってるのは約一名だってばw

316:NAME IS NULL
06/12/20 23:54:22
>>313
カレントディレクトリってのは、プログラム起動時に現在いたディレクトリのことだぞ。
たとえばc:\hoge\prog.exeってのをc:\hogeにいるときに実行したらc:\hogeだし、
c:\Windowsにいるときに、\hoge\prog.exeって入力して実行したらc:\Windowsになる。
もとから実行の仕方でいろいろと変るものだ。デフォルトのカレントディレクトリに依存してはいけない、

317:NAME IS NULL
06/12/21 00:32:21
最近はそんなことも知らん香具師がプログラムを書くのか

318:NAME IS NULL
06/12/21 00:54:46
実行ファイルの位置からパス取ればOK。

319:303
06/12/21 04:26:53
>>316
うーん。私の言葉が足りませんかねえ。
恐れ入りますが、CUIではなくて、
VisualStudio2005 + ADO.net 2.0 Data provider for SQLite
という環境で開発していることを、ご理解いただいているでしょうか。
そうであれば、どの設定をどうすればいいのか、ご教示願えないでしょうか。

>>318
どの「実行ファイル」でしょうか。開発対象か、開発環境自体か。


とりあえず、もう一度問題をまとめておきます。(もっとも、問題の本質が
以下のとおりであれば、どうにもならない気もしてますが。。)

起こっている問題は、VSによって生成されるバイナリ output.exe が、
データベースファイル data.db を参照しないこと、では*ありません*。
開発環境であるVS自体 devenv.exe が、相対パス指定された data.db の
場所を、正しく認識できないことです。

320:NAME IS NULL
06/12/21 13:26:16
CUIとか関係ないのに、根本的にわかってないな、この人

321:NAME IS NULL
06/12/21 15:59:12
この手の患者は自分の勘違いを自分で気がつくまで納得しないのが特徴

322:303
06/12/21 17:09:26
>>320
アプリケーションの形態がCUIかどうか、本質的には関係ないことはわかってます。
その意味では言葉が不適切でした。すみません。ここでの意味は、IDE(VS)による開発、
とでも置き換えられるでしょうか。

>>321
まあ、私の特徴としてはご指摘のとおりですね。で、もしVS2005を使う機会があれば、
(確認したところ、VC#2005 Express でも可能です) VSのデータ接続のウィザードで、
プロバイダにSQLite、データベースに .\data.db などを指定して、挙動をご確認
いただければ幸いです。その上で、私の勘違いについて指摘しているのであれば、
申し訳ありません。

323:NAME IS NULL
06/12/21 17:13:02
IDEだってEXEを起動してるだけなのは判るよね?
そのときのカレントディレクトリの問題じゃないの?
なんか説明がごちゃごちゃしててよく判らんけどさ

324:NAME IS NULL
06/12/21 17:52:30
とりあえず、303にカレントディレクトリという概念を理解できるほどの知能がないのはわかった。

325:303
06/12/21 18:03:14
>>323
はい、IDE(VS)はEXEそのものですね。

もしかして、>>312 さんが仰っているのは、VSのEXEを呼ぶ時点で、カレント
ディレクトリを変えておけ、というご指摘だったのでしょうか。

Solution1.sln と同一ディレクトリに、以下のバッチファイル置いて、

cd Solution1\bin\Debug
..\..\..\Solution1.sln

そいつからキックしたらうまくいきました。IDEの起動時にどうこうするとは
思いも及びませんでした。みなさま、スレ違いにお付き合いいただき
ありがとうございました。


326:303
06/12/21 18:06:04
>>324
的確なご指摘どうも。

327:NAME IS NULL
06/12/21 18:10:59
なんか微妙に理解が違う気がするけど、もう面倒くさいからいいや。とりあえずおめ。w

328:NAME IS NULL
06/12/21 19:07:39
・Win32 API にGetCurrentDirectory とSetCurrentDirectory がある
・開発環境からデバッグ開始する際はプロジェクトの設定のデバッグの項で作業ディレクトリを好きに設定できる。
・生成したバイナリを起動するときのカレントワーキングディレクトリは実行ファイルと同じディレクトリとは限らない。

>>303 がどうしたいのか知らないのでアドバイスできることは何もない。

329:303
06/12/21 19:36:05
>>328
>>325 で解決済みなんですが、せっかくですので。
どうしたい、どうなって欲しいのかは、Data Sourceに data.db などの相対パスを指定して、
VSのデータ接続のウィザードや、データセットの構成などが正常に行えること、です。

で、これができない理由は、生成されたバイナリ云々の問題ではなく、VSのEXE自体のカレント
ディレクトリが、(そのように工夫しなければ、) VSのEXE自体か、開発対象のソリューション
ファイルが存在する場所になるから、です。私がこれまで以上に重大な勘違いをしていない限り、
アドバイスしてくださった内容は、問題とは関係なさそうです。

330:NAME IS NULL
06/12/21 20:06:48
どこを基準にした相対パスにしたいのか分からん。

331:NAME IS NULL
06/12/21 20:23:51
>>329
いい加減消えてくれない?

332:NAME IS NULL
06/12/21 20:28:11
>>303のプログラムは、ショートカットから起動したりとかした場合
動かないプログラムになるのだろうな。

333:NAME IS NULL
06/12/22 00:35:30
UNCに置いて起動すると…

334:NAME IS NULL
06/12/22 00:39:14
>>303
IDEは悪くない、お前の頭が悪い

335:303
06/12/22 04:33:03
えーと、根本的なところで質問したいのですが。
アプリ本体、いくつかのDLL、DBファイルを、適当なディレクトリにXCOPYで
インストールが完了する(まあ、今回に関しては、.net frameworkは必要ですが)
スタンドアロンのプリを作ろうってのは、根本的なところから間違いなんですかね?
また、最初から SQLite はそういう要件を満たしうる物ではないのですか?
もしくは、VSのDB操作用の各種ツールは、そういう要件を満たしうる物ではない
のですか?

>>334
別にVSが悪いとまでは思ってませんよ。1アプリとして妥当な動作でしょう。
頭のよろしい >>334 様であれば、上記の要件を満たすアプリを、VSのDB操作用の
各種ツールを使ってどうやって開発するのか、お聞かせ願いますか。
そんなツール使わない、と仰るのであれば結構です。私も以前まではずっと
そうしてやってきましたので。

336:303
06/12/22 04:34:28
>>335 l.4
× スタンドアロンのプリ
○ スタンドアロンのアプリ
です。すみません。

337:NAME IS NULL
06/12/22 05:02:20
とりあえず、自分の精神が異常ということは認識しておいたほうがいい。

338:NAME IS NULL
06/12/22 09:44:43
Visual Studio 2005 Design-Time Support って
元々SQLServerみたいなのを想定して機能だから
SQLiteで相対パスでなんてのはVS側の想定範囲外だと思うよ。

条件コンパイルでリリース版だけデータソース変えるとかすればいいんじゃね、よく知らんけど。

339:NAME IS NULL
06/12/22 16:12:52
>>335
だからな。相対パスと、”どこからの”相対パスなのかと、
カレントディレクトリと実行ファイル位置の違いを
他人に説明できるぐらい調べろってことだ。

340:NAME IS NULL
06/12/22 18:44:40
>>335
もういいからVSとADO.NETの使い方を書籍を購入してSQLServerやOracleなどあらゆるDBを起動して
悶え狂い死ぬほど勉強と実戦を積んでから出直してこい。

少なくともここで回答している諸氏はそれほどの経験を修羅場をこなしてきた上での回答だ。
安易に質問すれば解決するなどとは思わない方がいい。


341:NAME IS NULL
06/12/22 20:34:16
しっかし、このバカなんでこんなに粘着しているんだ?

342:334
06/12/22 23:38:35
>>335
SQLiteは悪くない、お前の性格が悪い

343:NAME IS NULL
06/12/23 00:25:30
アクセス厨が手法を変えてウザウザやってるだけと推定。

344:NAME IS NULL
06/12/23 02:17:34
修羅場って、sqliteなんて使ってるから修羅場なんだよ。
アクセスなら修羅場なんて有りません。
SQL Serverへの移行も簡単だし、アイタニウムへの移行も簡単。

345:NAME IS NULL
06/12/23 02:59:08
んなーわけない。


346:NAME IS NULL
06/12/23 11:14:04
sqliteの開発者の数<<<厚い壁。<<<アクセスの開発者の数

デスマに陥るのはどちらか一目瞭然だ。

347:NAME IS NULL
06/12/23 11:22:55
アクセスなんてWindowsでしか動かん時点で(少なくともサーバ用としては)論外だろ。
アイテニアムで動かせと言われるよりはLinuxへ移植しろと言われる確率のほうが一兆倍
くらい高い。

348:NAME IS NULL
06/12/23 11:45:31
SQLite3で日本語扱うにはUTF-8しか無理なの?特に日本語での検索とかで。

349:NAME IS NULL
06/12/23 11:51:18
API的にはUTF-16(=Windowsの内部コード)でOK

350:NAME IS NULL
06/12/23 17:33:21
MSDEならアクセスから移行しやすい。
sqliteもリナックスも論外。バックアップすら総務の人間で出来ないし。

351:NAME IS NULL
06/12/23 17:56:59
Access厨が湧いてきたのと同時に、カレントディレクトリがわからないバカが消えた件について

352:NAME IS NULL
06/12/23 19:34:53
同一人(ry

353:NAME IS NULL
06/12/23 20:08:20
ほれここみろ。Accessなんか寂れて誰もつかわねーよ。それが真実だ。

【Access】アクセスは最強のデータベース!
スレリンク(db板)

354:NAME IS NULL
06/12/23 20:18:06
sqliteの話題なんかほとんどないし寂れているスレですね。

355:NAME IS NULL
06/12/23 20:34:37
Visual Studio 2005 Design-Time Support って、アクセスだと相対パスはどう解釈されるん?
アクセスおすすめの人、おしえてよ。

356:NAME IS NULL
06/12/23 22:45:12
あくせくのスレでやれw

357:NAME IS NULL
06/12/24 21:09:20
3.3.8からload_extensionが使えるようになったので試してみました
HAVE_DLOPENをdefineしないと使えないのがなんとも…
デフォルトでoffになってます。

configureには--enable-dlopenとかないので、
configure CFLAGS=-DHAVE_DLOPEN とやればいけます

これで後からユーザー定義関数をばしばし追加できるっぽい

たとえばCやC++でsoもしくはdllを作っておいて、
select load_extention("xxx.so");
とやってやれば、phpからでも使えたりするっぽい

だいたい下みたいな感じかな?

#include <sqlite3.h>
#include <sqlite3ext.h>

SQLITE_EXTENSION_INIT1

int sqlite3_extension_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi)
{
SQLITE_EXTENSION_INIT2(pApi)

// ここにユーザー定義関数を追加

return SQLITE_OK; // 正常終了
}


今、いろいろ試しつつ、fts1のソース読んでるところです
なんかアドバイスあればよろしくです


358:NAME IS NULL
06/12/24 21:57:38
普通にphpからsqlite使えますが?

359:NAME IS NULL
06/12/24 23:14:02
>>358
PHPでユーザー定義関数を使う場合
 ・今まで
   ユーザー定義関数もPHPで定義
     すごい遅い
   sqliteのソースを直接変更 or 類似の方法
     変更するたびコンパイル
     必要でない場合も組み込んだものがすべてメモリ上にロードされる
 ・load_extensionで実装
   CやC++で記述するので、そこそこ速度はでる
   必要になったらロードすればよい
   ex) 統計処理ライブラリと日付ライブラリなどを作っておけば、必要なところで別々に使用できる

おそらく、load_extensionでsql文の拡張もできるかも?

360:NAME IS NULL
06/12/24 23:53:44
そもそも速度求めるならphp要らない。
phpって簡単に弄れるだけのメリットしか無いよ。

361:NAME IS NULL
06/12/25 01:41:07
うんそうだね

362:NAME IS NULL
06/12/25 03:06:27
うんそうだね(棒読み)

363:NAME IS NULL
06/12/25 03:10:46
(感情を込めて) うん、そうだね。

364:NAME IS NULL
06/12/25 05:46:57
zend使えzend
非効率的だと思う

365:NAME IS NULL
06/12/25 11:29:45
ADO.net Data provider for SQLite
便利だなぁ

366:NAME IS NULL
06/12/26 21:00:32
>>365
.NET がうらやましい。Delphi 使いにはこれといった決め手がなくて……。
DISQLite3 が一番よさそうだが、商用ライセンスが 90 ユーロ、しかもソースは
別売り。Aducom の SQLite3 コンポーネントは WideString 非対応。フォーラムを
読む限りでは対応中らしいが、今日明日のうちにということではなさそうだ。

結局、Simple Sqlite 3.0 for Delphi を改造して WideString 対応にしたものを
使って開発中。

367:NAME IS NULL
06/12/27 18:57:28
PDOでsqlite3使おうと思ってるんですが、
分かる方いましたら教えてください!!

とりあえず、結果がなにも出力がされません・・・。
PDOでMySql使ってみたら正常にどうさしました。

ちなみに、クエリは正常に実行できててテーブル作ったりインサートしたりということはできてます、
ですが表示が全くされない状態です。

echo "aaa";  などと入れても無視されます。
設定は、VineLinuxのデフォルトで何も設定していません。
PHPINFOでPDOのSQLiteが有効なのも確認しました。

実行したコードはしたのものです
<?php
try {
$pdo = new PDO('sqlite:test.db','', '');
$stmt = $pdo->query("SELECT * FROM test");

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo implode(", ", $row) . PHP_EOL;
}
} catch(PDOException $e){
var_dump($e->getMessage());
}
$pdo = null;
?>

よろしくお願いします。

368:NAME IS NULL
06/12/27 21:08:49
>echo "aaa";  などと入れても無視されます。
これは SQLite の問題なのか?
PHP の問題じゃねーの?

369:NAME IS NULL
06/12/27 21:18:19
PHP使ってるくらいだから問題の切り分けもできない人なんだろう

370:NAME IS NULL
06/12/28 00:19:57
PHP使った事ないからググってみたけど、
データベースハンドラ?のqueryメソッドって
ステートメントハンドラじゃなくてもろに結果セットを
返してるみたいなんだがその辺どうなの?
DBドライバごとに返すもんが根本的に違うとかありえんと思うが…

371:NAME IS NULL
06/12/28 00:49:09
ごめん、用語色々おかしかった。
結果セット→結果セットを配列に詰め込んだ物と読み替えてくれ。

とりあえずqueryメソッドはPDOStatementを返すらしいが、
queryメソッドから返されたPDOSt(ryからfetchする例文はなかった。

DBI使おうぜDBI。

372:367
06/12/28 09:03:14
問題も切り分けられなくすいません・・。
初心者ですいません。

>368さん
PDO+SQL以外は正常に動作しています、
他のプログラムは実行できてますから・・。

とりあえず、PDO+SQL関連のコードが入っていると真っ白になります。

PHPじゃなくて他にいいのがあるんですかね?

373:NAME IS NULL
06/12/28 10:24:37
ループ内に入れたecho "aaa" が実行されないわけか。

とりあえずエラー処理をきっちりやるとこから始めたら?
PHP使いはエラー処理を書かないってホント?

374:371
06/12/28 12:25:46
ハンドルは同じPDOStatementオブジェクトなんだが、
prepare("[SELECT文]")で取得してexecuteしたハンドルからはfecthメソッドで行を取得
query("[SELECT文]")で取得したハンドルからはforeach ([ハンドル] as $row)とかで行を取得
らしい。

MySQLではうまく行ったってのは全く違うコードでドライバがMySQLだったってだけなんじゃ。


375:367
06/12/28 15:17:15
状況としては、
エラーがでるのは、

@表示OK
<?php
echo "aaa";
?>

A画面真っ白
<?php
echo "aaa";
try {
$pdo = new PDO('sqlite:test.db','', '');
$stmt = $pdo->query("SELECT * FROM test");

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo implode(", ", $row) . PHP_EOL;
}
} catch(PDOException $e){
var_dump($e->getMessage());
}
$pdo = null;
?>

B正常表示
<?php
try {
$pdo = new PDO("mysql:host=localhost; dbname=test",
"mysql", "password");
$stmt = $pdo->query("SELECT * FROM test");

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo implode(", ", $row) . PHP_EOL;
}
} catch(PDOException $e){
var_dump($e->getMessage());
}
$pdo = null;
?>


376:NAME IS NULL
06/12/28 17:25:20
PHPって奴にはエラーメッセージっつーのは無いのかね

377:NAME IS NULL
06/12/28 18:15:13
>catch(PDOException $e){
> var_dump($e->getMessage());
>}
ここがエラーメッセージを取得してるとこだろ…常識的に考えて…
で、この getMessage() とやらは echo に渡さなくても文字列を出力してくれるんかいな?

378:NAME IS NULL
06/12/28 22:07:06
var_dumpってのがデバッグ表示の出力命令じゃないか?
素人判断だけど。

あとfetchのパラメータで返される行の形式指定するみたいだけど
ドライバによっては非対応の値とかあるんじゃないか?
素人判断だけど。

379:NAME IS NULL
06/12/29 00:15:12
俺みたいにPHP知らない奴でもこのスレさえ読んでれば生半可な知識が身につくな

380:NAME IS NULL
06/12/29 04:41:33
普通にprintデバック。
たかがスクリプトだぞ。デバッカなんて有りません。

つーかsqlite廚ってアクセス廚よりスキル低いよな。
やっぱりアクセス本みたいなのが無いから?

381:NAME IS NULL
06/12/29 08:06:16
>>380
標準でGUI環境が無いからかと。


382:NAME IS NULL
06/12/29 09:41:58
PHP厨はSQLite厨よりもスキル低いわけかw

383:NAME IS NULL
06/12/29 09:44:21
例外で全てのエラーをキャッチできるとは限らないんだから、中間に出てくる値全部printしてみたり
エラー変数みたいのがあればそれもprintしてみたりするしかないんじゃないのかね。

384:NAME IS NULL
06/12/29 09:45:03
PHPからアクセスを扱うコード禿げしく希望!w

385:NAME IS NULL
06/12/29 11:22:14
>>384
こっち逝け

【Access】アクセスは最強のデータベース! (13)
スレリンク(db板)l50

386:NAME IS NULL
06/12/29 11:24:22
>>380
> たかがスクリプトだぞ。デバッカなんて有りません。
レベル低いのはお前。

PHPのデバッガなんていくらでも有る。

387:NAME IS NULL
06/12/29 16:45:11
最近のPHPのデフォはエラー吐かないから、
ローカルでエラー吐く環境作っとけ、と。

388:NAME IS NULL
06/12/30 00:02:29
実にPHPの勉強になるスレだな。一生使う機会は無いだろうけど。w

389:NAME IS NULL
06/12/30 09:37:45
>>387
デフォではかないなら、
はくようにすればいいだけじゃんw

390:NAME IS NULL
06/12/31 03:21:58 7TDC6eJ8
>>389
ウェブ上にエラー吐かれるとセキュリティ上困るって意味じゃないのか?w
PHPはZendという優れた開発環境があるからみんな使ってね。

391:NAME IS NULL
06/12/31 10:45:22
開発はインターネットから見えないテストマシンでやれぼけ。

392:NAME IS NULL
06/12/31 12:47:34
そろそろスレ違いだと思うが

エラーメッセージの挙動なんて
(httpdの設定にもよるが) .htaccess にPHPの設定を書けば
変わるようにできるんだし、インターネットから見えるとこで開発してるわけでもないんだろ?

393:NAME IS NULL
06/12/31 14:45:39
レン鯖しか動作環境持ってないウェブデザって多いよ。
自分で動作環境すら作れない。

ヒント:ODBC
ここの住人はスキルが低いですね。

394:NAME IS NULL
06/12/31 15:59:27
ODBCってWindows用だろ?

395:NAME IS NULL
06/12/31 18:11:51
>393は>384への回答だろ。

396:NAME IS NULL
06/12/31 18:32:08
URLリンク(support.microsoft.com)

IIS/ASP から Jet にアクセスする場合、ADO 経由で
Access ODBC ドライバ、または OLE DB Provider for Jet を
使用できます。しかし Access ODBC ドライバ、
および OLE DB Provider for Jet は、Web システムなどの
多くのユーザーからのアクセスによる同時実行や
高負荷の対応はされておらず、また、終日稼動で運用されるような
高い信頼性を要求されるサーバー アプリケーションで
使用されることを考慮して設計されていません。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4329日前に更新/190 KB
担当:undef