おせわになります レコードを直接変更したいのですが レコードを書き込み禁止を解除?したいのですが かりに
context1 = createUnoService("com.sun.star.sdb.DatabaseContext")
src1 = context1.getByName("xxxxx")
cnn1 = src1.getConnection("", "")
stm1 = cnn1.createStatement()
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
ResultSetConcurrency = UPDABLTAE
とした時 ResultSetConcurrency = UPDATABLE がBASIC runtaime error. 変数の未定義 でプログラムが止まります
ResultSetConcurrency = UPDABLTAE はどうやって使用すればいいのですか? 教えてくださいお願いします。
[解決しました]レコードの書き込み禁止解除
[解決しました]レコードの書き込み禁止解除
最後に編集したユーザー Kankun [ 7月 28, 2012, 4:35 pm ], 累計 1 回
OpenOffice.org 4.1.5
Win 7 10
Win 7 10
Re: レコードの書き込み禁止解除
service Statement のプロパティのようですね。
http://www.openoffice.org/api/docs/comm ... oncurrency
stm1.ResultSetConcurrency=1008
http://www.openoffice.org/api/docs/comm ... rency.html
http://www.openoffice.org/api/docs/comm ... oncurrency
stm1.ResultSetConcurrency=1008
http://www.openoffice.org/api/docs/comm ... rency.html
Re: レコードの書き込み禁止解除
ike@九州さん お返事ありがとうございました 早速ためして見ました
context1 = createUnoService("com.sun.star.sdb.DatabaseContext")
src1 = context1.getByName("xxxxx")
cnn1 = src1.getConnection("", "")
stm1 = cnn1.createStatement()
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
stm1.ResultSetConcurrency=1008
rem ResultSetConcurrency = UPDATEABLE
と変更してみたら 取りあえずOKでしたが この後の、レコードを変更する所で
rst1.updateString(2,rst2.getString(1)) して見たところ
BASIC runTime Error.例外が発生しました
Type: com.sun.star.sdbc.SQL ExceptionMessage The result set is Read-only.
とエラーが発生しました まだRead-onlyなんですよね
もしよろしければ アドバイスしてください よろしくおねがいします
context1 = createUnoService("com.sun.star.sdb.DatabaseContext")
src1 = context1.getByName("xxxxx")
cnn1 = src1.getConnection("", "")
stm1 = cnn1.createStatement()
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
stm1.ResultSetConcurrency=1008
rem ResultSetConcurrency = UPDATEABLE
と変更してみたら 取りあえずOKでしたが この後の、レコードを変更する所で
rst1.updateString(2,rst2.getString(1)) して見たところ
BASIC runTime Error.例外が発生しました
Type: com.sun.star.sdbc.SQL ExceptionMessage The result set is Read-only.
とエラーが発生しました まだRead-onlyなんですよね
もしよろしければ アドバイスしてください よろしくおねがいします
OpenOffice.org 4.1.5
Win 7 10
Win 7 10
Re: レコードの書き込み禁止解除
BASE では更新クエリは不可仕様なので UPDATE で代替だと思います。
(rst1 は READ ONLY のみ)
http://hsqldb.org/doc/guide/dataaccess- ... _statement
生成文確認していません。以下のような生成文になれば宜しいかと
UPDATE 最新状態 SET "対象カラム名" = ' 文字列 ' WHERE "車両インデックス" = 値
カラム名はダブルクオート必須、文字列はシングルクオート
stm1.executeUpdate("UPDATE 最新状態 SET ""対象カラム名"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
(rst1 は READ ONLY のみ)
http://hsqldb.org/doc/guide/dataaccess- ... _statement
生成文確認していません。以下のような生成文になれば宜しいかと
UPDATE 最新状態 SET "対象カラム名" = ' 文字列 ' WHERE "車両インデックス" = 値
カラム名はダブルクオート必須、文字列はシングルクオート
stm1.executeUpdate("UPDATE 最新状態 SET ""対象カラム名"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
Re: レコードの書き込み禁止解除
ike@九州さん お返事ありがとうございました 早速ためして見ましたが
とりあえずエラーは無くなりました(プログラムの途中ですが)けどファアイル(ハードディスクの中の)
に書き込まれませんまだなにかプログラムを追加しなければいけませんか?
もしよければまた、アドバイスよろしくおお願いします。
context1 = createUnoService("com.sun.star.sdb.DatabaseContext")
src1 = context1.getByName("車の修理")
cnn1 = src1.getConnection("", "")
stm1 = cnn1.createStatement()
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
stm1.ResultSetConcurrency=1008
' ResultSetConcurrency = UPDATEABLE
context2 = createUnoService("com.sun.star.sdb.DatabaseContext")
src2 = context2.getByName("車の修理")
cnn2 = src2.getConnection("", "")
stm2 = cnn2.createStatement()
rem stm2.ResultSetConcurrency=1008
'******************************************************************************************************************************************************************
'*
'* 最大走行距離 と 日付を抽出
'*
'******************************************************************************************************************************************************************
rem 下のクエリーは 最大走行距離と日日が抽出するもの
rst2 = stm2.executeQuery("SELECT 車両インデックス , MAX( 走行距離メータ ), MAX( 作業日 ) FROM 作業データ GROUP BY 車両インデックス ORDER BY 車両インデックス ASC")
If Not IsNull(rst2) Then
While rst2.next
qes = "'"+Trim(rst2.getString(1))+"'"
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
count = 0
While rst1.next
count = count + 1
Wend
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
stm1.ResultSetConcurrency=1008
rst1.next
if count = 0 then
if Debg=1 then
msgbox " ***** レコードなし **** "+" qes>"&qes & "< count "&count
endif
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:NewRecord", "", 0, Array())
if Debg=1 then
MsgBox "インデックスRST2 >"&rst2.getString(1)&" 最終距離RST2 > "&rst2.getString(2) &"日日 > "&rst2.getString(3)
endif
rem rst1.updateString(2,rst2.getString(1))
rem rst1.updateString(3,rst2.getString(2))
rem rst1.updateString(4,rst2.getString(3))
stm1.executeUpdate("UPDATE 最新状態 SET ""車両インデックス"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認距離"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認日"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
else
if Debg=1 then
MsgBox " レコード あり "+" qes >" &qes & "< count "&count
MsgBox "インデックス "&rst1.getString(2) &" 最終距離 > "&rst1.getString(3) &" 日日 > "& rst1.getString(4)
endif
rst1 = stm1.executeQuery("SELECT * FROM 最新状態")
rst1.next
While rst1.getString(2) = qes
MsgBox "インデックス "&rst1.getString(2) &" 最終距離 > "&rst1.getString(3) &" 日日 > "& rst1.getString(4)& " qes >"&qes
rem MsgBox "インデックス RST1>"&rst1.getString(2)&" 最終距離 > "&rst1.getString(3) &"日日 > "& rst1.getString(4)
rst1.next
Wend
rem rst1.updateString(3,rst2.getString(2))
rem rst1.updateString(4,rst2.getString(3))
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認距離"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認日"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
Endif
rem If not IsNull(rst1) Then
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:NextRecord", "", 0, Array())
rem End If
Wend
End If
rst2.close()
cnn2.close()
rst1.close()
cnn1.close()
この後 エンジンオイル エレメント交換時の最大走行距離 と 日付を抽出する 同じ様なプログラムがつづきます
(サンプルのデーターベースを添付できればいいのですが)
テーブル
作業データ 過去の作業記録
最新状態 作業データから個々の最終交換距離 取り換え日等を入力したい
マクロで実現したい事
作業データ から 車両インデックスごとの最新の状態を調べて一つのファイル(テーブル最新状態)にしたい。
とりあえずエラーは無くなりました(プログラムの途中ですが)けどファアイル(ハードディスクの中の)
に書き込まれませんまだなにかプログラムを追加しなければいけませんか?
もしよければまた、アドバイスよろしくおお願いします。
context1 = createUnoService("com.sun.star.sdb.DatabaseContext")
src1 = context1.getByName("車の修理")
cnn1 = src1.getConnection("", "")
stm1 = cnn1.createStatement()
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
stm1.ResultSetConcurrency=1008
' ResultSetConcurrency = UPDATEABLE
context2 = createUnoService("com.sun.star.sdb.DatabaseContext")
src2 = context2.getByName("車の修理")
cnn2 = src2.getConnection("", "")
stm2 = cnn2.createStatement()
rem stm2.ResultSetConcurrency=1008
'******************************************************************************************************************************************************************
'*
'* 最大走行距離 と 日付を抽出
'*
'******************************************************************************************************************************************************************
rem 下のクエリーは 最大走行距離と日日が抽出するもの
rst2 = stm2.executeQuery("SELECT 車両インデックス , MAX( 走行距離メータ ), MAX( 作業日 ) FROM 作業データ GROUP BY 車両インデックス ORDER BY 車両インデックス ASC")
If Not IsNull(rst2) Then
While rst2.next
qes = "'"+Trim(rst2.getString(1))+"'"
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
count = 0
While rst1.next
count = count + 1
Wend
rst1 = stm1.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = "+qes)
stm1.ResultSetConcurrency=1008
rst1.next
if count = 0 then
if Debg=1 then
msgbox " ***** レコードなし **** "+" qes>"&qes & "< count "&count
endif
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:NewRecord", "", 0, Array())
if Debg=1 then
MsgBox "インデックスRST2 >"&rst2.getString(1)&" 最終距離RST2 > "&rst2.getString(2) &"日日 > "&rst2.getString(3)
endif
rem rst1.updateString(2,rst2.getString(1))
rem rst1.updateString(3,rst2.getString(2))
rem rst1.updateString(4,rst2.getString(3))
stm1.executeUpdate("UPDATE 最新状態 SET ""車両インデックス"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認距離"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認日"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
else
if Debg=1 then
MsgBox " レコード あり "+" qes >" &qes & "< count "&count
MsgBox "インデックス "&rst1.getString(2) &" 最終距離 > "&rst1.getString(3) &" 日日 > "& rst1.getString(4)
endif
rst1 = stm1.executeQuery("SELECT * FROM 最新状態")
rst1.next
While rst1.getString(2) = qes
MsgBox "インデックス "&rst1.getString(2) &" 最終距離 > "&rst1.getString(3) &" 日日 > "& rst1.getString(4)& " qes >"&qes
rem MsgBox "インデックス RST1>"&rst1.getString(2)&" 最終距離 > "&rst1.getString(3) &"日日 > "& rst1.getString(4)
rst1.next
Wend
rem rst1.updateString(3,rst2.getString(2))
rem rst1.updateString(4,rst2.getString(3))
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認距離"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
stm1.executeUpdate("UPDATE 最新状態 SET ""最終確認日"" = '" + rst2.getString(1) + "' WHERE ""車両インデックス"" = " + qes + ";")
Endif
rem If not IsNull(rst1) Then
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:NextRecord", "", 0, Array())
rem End If
Wend
End If
rst2.close()
cnn2.close()
rst1.close()
cnn1.close()
この後 エンジンオイル エレメント交換時の最大走行距離 と 日付を抽出する 同じ様なプログラムがつづきます
(サンプルのデーターベースを添付できればいいのですが)
テーブル
作業データ 過去の作業記録
最新状態 作業データから個々の最終交換距離 取り換え日等を入力したい
マクロで実現したい事
作業データ から 車両インデックスごとの最新の状態を調べて一つのファイル(テーブル最新状態)にしたい。
OpenOffice.org 4.1.5
Win 7 10
Win 7 10
Re: レコードの書き込み禁止解除
サンプル無いので適宜変更してください。
メインの部分です
Sub Main
context1 = createUnoService("com.sun.star.sdb.DatabaseContext")
src1 = context1.getByName("車の修理")
cnn1 = src1.getConnection("", "")
stm1 = cnn1.createStatement()
stm2 = cnn1.createStatement()
rst1 = stm1.executeQuery("SELECT 車両インデックス , MAX( 走行距離メータ ) , MAX( 作業日 ) FROM 作業データ GROUP BY 車両インデックス ORDER BY 車両インデックス ASC")
While rst1.next
qes = "'"& Trim(rst1.getString(1)) & "'"
iKyori = rst1.getInt(2) 'カラムの設定に応じて getInt、getLong、getFloat、getDouble
sDate = "'" & rst1.getString(3) & "'"
rst2= stm2.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = " & qes)
'該当車両インデックスがない場合に新規挿入、必要に応じて カラム名、VALUES 追加
If Not rst2.next then
stm2.executeUpDate("INSERT INTO 最新状態(車両インデックス) VALUES(" & qes & ")")
End If
'最新データに更新
stm2.executeUpDate( "UPDATE 最新状態 SET ""最終確認距離"" = " & iKyori & "," & """最終確認日"" = " & sDate & " WHERE 車両インデックス = " & qes)
Wend
stm1.close()
stm2.close()
cnn1.close()
End Sub
メインの部分です
Sub Main
context1 = createUnoService("com.sun.star.sdb.DatabaseContext")
src1 = context1.getByName("車の修理")
cnn1 = src1.getConnection("", "")
stm1 = cnn1.createStatement()
stm2 = cnn1.createStatement()
rst1 = stm1.executeQuery("SELECT 車両インデックス , MAX( 走行距離メータ ) , MAX( 作業日 ) FROM 作業データ GROUP BY 車両インデックス ORDER BY 車両インデックス ASC")
While rst1.next
qes = "'"& Trim(rst1.getString(1)) & "'"
iKyori = rst1.getInt(2) 'カラムの設定に応じて getInt、getLong、getFloat、getDouble
sDate = "'" & rst1.getString(3) & "'"
rst2= stm2.executeQuery("SELECT * FROM 最新状態 WHERE 車両インデックス = " & qes)
'該当車両インデックスがない場合に新規挿入、必要に応じて カラム名、VALUES 追加
If Not rst2.next then
stm2.executeUpDate("INSERT INTO 最新状態(車両インデックス) VALUES(" & qes & ")")
End If
'最新データに更新
stm2.executeUpDate( "UPDATE 最新状態 SET ""最終確認距離"" = " & iKyori & "," & """最終確認日"" = " & sDate & " WHERE 車両インデックス = " & qes)
Wend
stm1.close()
stm2.close()
cnn1.close()
End Sub
Re: レコードの書き込み禁止解除
ike@九州さん お返事大変ありがとうございました
教えていただいたものをベースにして考えてみます 大変勉強になりました。
教えていただいたものをベースにして考えてみます 大変勉強になりました。
OpenOffice.org 4.1.5
Win 7 10
Win 7 10
Re: レコードの書き込み禁止解除
とりあえず解決したので サンプルを貼り付けます 皆様いろいろありがとうございました
- 添付ファイル
-
- 車のメンテナンス.zip
- (5.81 KiB) ダウンロード数: 293 回
OpenOffice.org 4.1.5
Win 7 10
Win 7 10