ラベル mySQL の投稿を表示しています。 すべての投稿を表示
ラベル mySQL の投稿を表示しています。 すべての投稿を表示

2010/11/19

access2010 access2007 パッケージソリューションウィザード その10 ChainedInstall

配布用セットアップファイルに、同時にインストールしたいドライバなどを追加してみる。
編集するのは生成されたパッケージ内の/Files/Setup/setup.ini。これにChainedInstall_nセクションを追加する。詳細の情報はここ

MySQL ODBCドライバを同時に配布しインストール。 msi/exeはPathに指定したフォルダに配置。
[ChainedInstall_1]
TaskName=MySQL ODBC Connecter 5.1.8 win32
TaskType=msi
Path=\Files\mysql-connector-odbc-5.1.8-win32.msi
IgnoreReturnValue=0
;cmdline=

runtimeパッケージインストールファイルを含めていれば、[ChainedInstall_1]を使っているだろうから、[ChainedInstall_2]ってことになるかな。
5.1.6がインストールされていたんだけど、5.1.8に更新されて、まぁいいんじゃないか。
配布アプリケーションのアップグレードコード元のプロダクトコードとアップグレードコードを使って、本体も更新しつつドライバーも更新だ。

Package Solution Wizard まとめはこちら

2010/05/12

access2010 MySQL接続でのメモ

Option Compare Database
Option Explicit

Const cnString = "Driver={MySQL ODBC 5.1 Driver};" & _
                 "server=mySQLServer;" & _
                 "port=3306;" & _
                 "database=test;" & _
                 "uid=testuser;" & _
                 "pwd=password;"

Sub test()
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    cn.Open cnString
    rs.CursorLocation = adUseClient
    rs.Open "select * from test_table;", cn
    Debug.Print "rs.RecordCount", rs.RecordCount, TypeName(rs.RecordCount)
    rs.Close: cn.Close
    Set rs = Nothing: Set cn = Nothing
End Sub
このコード実行結果:rs.RecordCount 31 LongLong
recordcountにはLongLongで値が戻る。

なので、格納先はLongPtrを使用/Longにキャスト/Variantで受けてDecimal。
64bit環境のみならばLongLong使用可。

<追記>
Win7SP1時点で、ADOに修正が入る。修正以降は、LongLongが戻らず、Longで戻る模様。

2010/05/11

VBA ADOconnectionString memo

Option Compare Database
Option Explicit

'Public Const cnString = ""


'********** MySQL **********
'Public Const cnString = "Driver={MySQL ODBC 5.1 Driver};" & _
                        "server=server_name;" & _
                        "port=3306;" & _
                        "database=DBName;" & _
                        "uid=Account_Name;" & _
                        "pwd=Password;" & _
                        "option=3;"

'Public Const cnString = "Driver={MySQL ODBC 3.51 Driver};" & _
                        "Server=myServerAddress;" & _
                        "Database=myDataBase;" & _
                        "User=myUsername;" & _
                        "Password=myPassword;" & _
                        "Option=3;"

'********** Access **********
'Public Const cnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=C:\myFolder\myAccessfile.accdb;" & _
                        "Persist Security Info=False;"

'Public Const cnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=C:\myFolder\myAccessfile.accdb;" & _
                        "Jet OLEDB:Database Password=MyDbPassword;"

'Public Const cnString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" & _
                        "DBQ=C:\myFolder\myAccessfile.accdb;"

'Public Const cnString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" & _
                        "DBQ=C:\myFolder\myAccessfile.accdb;" & _
                        "Pwd=MyDbPassword;" & _
                        "Uid="
'********** MS-SQL **********
'Public Const cnString = "Driver={SQL Server Native Client 10.0};" & _
                        "Server=myServerAddress;" & _
                        "Database=myDataBase;" & _
                        "Uid=myUsername;" & _
                        "Pwd=myPassword;"
'
'Are you using SQL Server 2008 Express?
'Don't miss the server name syntax Servername\SQLEXPRESS
'where you substitute Servername with the name of the
'computer where the SQL Server 2008 Express installation resides.
'
'Public Const cnString = "Driver={SQL Server Native Client 10.0};" & _
                        "Server=myServerAddress;" & _
                        "Database=myDataBase;" & _
                        "Trusted_Connection=yes;"
'
'Equivalent key-value pair: "Integrated Security=SSPI" equals "Trusted_Connection=yes"


2009/07/21

更新できないRecordset

tblPuroduct,tblCategoryでjoinしたRecordsetは更新ができない。
SELECT tblPuroduct.*, tblCategory.CategoryName
FROM tblPuroduct
LEFT JOIN tblCategory USING (CategoryID);
USINGとは** ON tblPuroduct.CategoryID = tblCategory.CategoryID
ODBC接続しているのであるが、おそらく制約で更新できるRecordsetにならない。
ADO動的プロパティを使ってみてもうまくいった試しがないから、別の手段で。

手段1
リンクテーブルとフォームプロパティUniqueTable使用
手段2
joinで結合するFieldを読み取り専用にしちゃう
SELECT tblPuroduct.*, IFNULL(tblCategory.CategoryName,'')
FROM tblPuroduct
LEFT JOIN tblCategory ON USING (CategoryID);

2009/07/13

MySQL:Insert Update Trigger

schema:testに親テーブルp01と子テーブルc01
p01.childrowsにc01のレコード数が入るイメージで、
insert,update時にtirggerを回す
***** p01 *****
CREATE TABLE `test`.`p01` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`childrows` int(11) DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=cp932;

***** c01 *****
CREATE TABLE `test`.`c01` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Chilldname` varchar(10) NOT NULL,
`pID` int(11) DEFAULT NULL,
`isDeleted` int(1) DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=cp932;

***** inset_trigger *****
delimiter //
create trigger c01_after_insert
after insert on test.c01
for each row
begin
update p01
set childrows = (select count(*) from c01 where pID = new.pID and c01.isDeleted = 0)
where ID = new.pID;
end//
delimiter ;

***** update trigger *****
delimiter //
create trigger c01_after_update
after update on test.c01
for each row
begin
if new.isDeleted <> old.isDeleted then
update p01
set childrows = (select count(*) from c01 where pID = new.pID and c01.isDeleted = 0)
where ID = new.pID;
end if;
end//
delimiter ;

2009/07/07

mySQL-Win-x64

win2008SVstdいじくり倒し用サーバにmySQL5を導入してみた。
インストール自体は無事に済んだが、セットアップウィザードが完了しない。
administratorでログインしたら成功した。

2009/05/01

date_format関数

accessフォームのリストボックスに日付フィールドを表示。
狭いので日付表示yyyy/mm/ddを変更する。

そのままであれば、
select sampledate from TableName;
で呼び出して、
set me.listbox_0.RecordSet = Rs
で問題なし。

mm/ddに変更するため、mySQLの関数を利用。
select date_format(sampledate,'%m/%d') from TableName;
これは残念な結果になる 'バイナリ'

さらにmySQLの関数を利用。convert(xxxx ujing CharSet)
select convert(date_format(sampledate,'%m/%d') using sjis) from TableName;

2009/04/30

楽観的

トランザクションとか抜きに楽観的に考えた。mySQLのTimeStampを利用。
分解能は1秒だから秒単位に同時更新するとどうなるかわからない。
たぶん、後だしが勝つのではないかと。

日時処理は、帳票見ながらのinsertと誤投入のUpdateなのだからさ。