SQLの窓

2014年05月10日


MySQL を UTF-8 環境で作成して、mysqldump.exe でバックアップするバッチファイルのサンプル

Windows では、MySQL は UTF-8 環境で作成されますが(MySQL 5.6 (Generally Available (GA) Releases) インストール)、クライアントを cp932(shift_jis) としてテーブルを作成し(MySQL 5.6 : テストデータ自動作成スクリプト)、mysqldump.exe で shift_jis のテーブル名を指定して実行すると、そのままでは認識してくれません。

--default-character-set=cp932 をコマンドラインに追加すると、テーブル名を認識してくれますが、出力されたデータは SHIFT_JIS と UTF-8 が混在になっています。( データ部分は SHIFT_JIS で、CREATE 文部分は UTF-8 )

エディタで、個別に該当のキャラクタセットで表示してやるとどちらも使えますが、--default-character-set=cp932 を指定せずに、テーブル指定無しで全て出力してやると、出力されたデータは全て UTF-8 になります。

※ cp932 にしないと、いくつかの文字が正しく変換されずに ? と表示されます( sjis だとそうなります )
setlocal
set run_path=C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe
set save_path=%temp%\mysqldump.sql
set save_path_table=%temp%\mysqldump_table.sql
set save_tables=商品マスタ 社員マスタ

REM 全てのテーブルとビュー( 全て、UTF-8 で書き込まれます )
"%run_path%" --host=localhost --user=root --password=trustno1 --add-drop-table --force --quote-names lightbox > "%save_path%" & explorer /select,"%save_path%"

REM テーブル指定( CREATE 文部分のみが、UTF-8 で書き込まれます )
"%run_path%" --host=localhost --user=root --password=trustno1 --add-drop-table --force --quote-names --default-character-set=cp932 lightbox %save_tables% > "%save_path_table%" & explorer /select,"%save_path_table%"


▼ SHIFT_JIS 環境のエディタ内で、UTF-8 として表示された CREATE 文
--
-- Table structure for table `商品マスタ`
--

DROP TABLE IF EXISTS `商品マスタ`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `蝠・刀繝槭せ繧ソ` (
  `蝠・刀繧ウ繝シ繝荏 varchar(4) NOT NULL DEFAULT '',
  `蝠・刀蜷港 varchar(50) DEFAULT NULL,
  `蝨ィ蠎ォ隧穂セ。蜊倅セ。` int(11) DEFAULT NULL,
  `雋ゥ螢イ蜊倅セ。` int(11) DEFAULT NULL,
  `蝠・刀蛻・。杼 varchar(3) DEFAULT NULL,
  `蝠・刀蛹コ蛻・ varchar(1) DEFAULT NULL,
  `菴懈・譌・` datetime DEFAULT NULL,
  `譖エ譁ー譌・` datetime DEFAULT NULL,
  PRIMARY KEY (`蝠・刀繧ウ繝シ繝荏)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;




posted by lightbox at 2014-05-10 16:29 | MySQL | このブログの読者になる | 更新情報をチェックする

2014年05月09日


MySQL 5.6 : テストデータ自動作成スクリプト

2014/05/10 : DROP TABLE IF EXISTS 構文を追加し、charset に cp932をセットしました
2014/05/09 : ダイアログのラベル表記を XN Resource Editor(日本語版)で変更しました

※ MySQL のインストールと動作確認は、以下を参照して下さい。

MySQL 5.6.11(Generally Available (GA) Releases) インストール

スクリプトパッケージは以下になります
( mysql-installer-community-5.6.17.0.msi でテスト済みです )

ダウンロード


事前にデータベースを作成しておく必要がありますが、既存の一般データベースでもかまいません。
( ※再作成する場合は、ビューを全て削除し、テーブルを全て削除して下さい )

前述のリンク先の『動作確認』で使用した『SQLの窓 Build C++』で mysql に接続して、右のテキストエリアで create database lightbox と入力して『act』ボタンをクリックすると lightbox データベースが作成されます。( データベース名は 英字で適当に命名して下さい )



createHanbaiB.bat を実行するだけですが、MySQL ODBC 5.2w Driver MySQL ODBC 5.3 Unicode Driver がインストールされている必要があります( 前述のリンク先の内容でインストールするとインストールされます )

※ 現在 MySQL ODBC 5.3 Unicode Driver が最新です(mysql-connector-odbc-5.3.2-win32.msi)
ドライバ名が異なる場合は、process.wsf の 74 行目の "{MySQL ODBC 5.3 Unicode Driver}" を変更して下さい。
( レジストリの HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI に正しい文字列でツリーがあります )

関連する記事

MySQL のインストールと Windows7 64ビットの ODBC と 32ビットの ODBC

名前は組み合わせでランダムで作成しているので、スクリプト内を変更するとバリエーションをカスタマイズ可能です。 ▼ コマンドプロンプトで実行 charset は、SQLの窓 Build C++ の内部が SHIFT_JIS なので必要です。内部表現が Unicode のアプリケーションでは必要ありません( MySQL が utf-8 の場合 ) 関連する記事



posted by lightbox at 2014-05-09 21:29 | MySQL | このブログの読者になる | 更新情報をチェックする

Oracle XE インストール後の環境情報( Windows )

レジストリ

HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_XE

環境変数は特に設定されません。PATH 環境変数には、直接 ORACLE_HOME 内の情報でパスが設定されています。
▼ Oracle ドキュメント
15 パラメータおよびレジストリの構成

この中で代表的な内容の説明は以下のようになっています
ORACLE_SID
ホスト・コンピュータ上のOracle Databaseインスタンスの名前を指定します。インスタンスのSIDがこのパラメータの値です。デフォルト値は、Oracle Universal Installerのデータベース識別情報ウィンドウのエントリです。

ORACLE_HOME
Oracle製品がインストールされるOracleホーム・ディレクトリを指定します。このディレクトリはOracleディレクトリ階層のOracleベース・ディレクトリのすぐ下に置かれます。デフォルト値は、インストール中に指定するドライブ文字および名前です。
SPFILE
###########################################
# Copyright (c) 1991, 2011, Oracle and/or its affiliates. All rights reserved. 
###########################################
 
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
 
###########################################
# Database Identification
###########################################
db_name=XE
 
###########################################
# File Configuration
###########################################
control_files=("C:\oraclexe\app\oracle\oradata\XE\control.dbf")

###############################diagnostic_dest=############
# Job Queues
###########################################
job_queue_processes=4
 
###########################################
# Miscellaneous
###########################################
compatible=11.2.0.0.0
diagnostic_dest=C:\oraclexe\app\oracle\.
memory_target=1024M


###########################################
# Processes and Sessions
###########################################
sessions=20 
 
 
###########################################
# Security and Auditing
###########################################
audit_file_dest=C:\oraclexe\app\oracle\admin\XE\adump
remote_login_passwordfile=EXCLUSIVE
 
###########################################
# Shared Server
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=XEXDB)"
shared_servers=4 

 
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_tablespace=UNDOTBS1

###########################################
# Backup and Recovery
###########################################
DB_RECOVERY_FILE_DEST_SIZE = 10G
DB_RECOVERY_FILE_DEST=C:\oraclexe\app\oracle\fast_recovery_area



C:\oraclexe\app\oracle\product\11.2.0\server\config\scripts にある、XE.bat が実行されます。その中に、『postDBCreation.sql』の実行処理があり、その中で SPFILE を作成しています。
DEFINE sysPassword = "&1"
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool C:\oraclexe\app\oracle\product\11.2.0\server\config\log\postDBCreation.log
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
//create or replace directory DB_BACKUPS as 'C:\oraclexe\app\oracle\fast_recovery_area';
begin
   dbms_xdb.sethttpport('8080');
   dbms_xdb.setftpport('0');
end;
/
create spfile='C:\oraclexe\app\oracle\product\11.2.0\server\dbs/spfileXE.ora' FROM pfile='C:\oraclexe\app\oracle\product\11.2.0\server\config\scripts\init.ora';
shutdown immediate;
connect "SYS"/"&&sysPassword" as SYSDBA
startup ;
select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual;
execute utl_recomp.recomp_serial();
select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual;
alter user hr password expire account lock;
alter user ctxsys password expire account lock;
alter user outln password expire account lock;
alter user MDSYS password expire;
@C:\oraclexe\app\oracle\product\11.2.0\server\apex\apxxepwd.sql "&1"
spool off;
exit

※ C:\oraclexe\app\oracle\product\11.2.0\server\config\log に結果のログがあります

ネットワーク

C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN に、tnsnames.ora があり、ネット・サービス名が定義されています。
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = layla)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ORACLR_CONNECTION_DATA = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
    ) 
    (CONNECT_DATA = 
      (SID = CLRExtProc) 
      (PRESENTATION = RO) 
    ) 
  ) 

listener.ora には、DEFAULT_SERVICE_LISTENER が定義されており、ユーザーがクライアント側からサービス名を指定せずに、データベースに接続できるようにします。
Oracle Database 11gでは、クライアントがデータベースに接続しようとすると、接続リクエストがリスナーに渡されます。リスナーは複数の異なるデータベースにサービスを実行していることがあります。サービス名がこのパラメータで構成されている場合、ユーザーは必ずしもサービス名を接続構文で指定する必要はありません。ユーザーがサービス名を指定した場合、リスナーは指定したデータベースにユーザーを接続します。サービス名を指定しない場合、リスナーはDEFAULT_SERVICE_listener_nameパラメータで指定されたサービス名にユーザーを接続します。
▼ Oracle ドキュメント 7 Oracle Net Listenerパラメータ(listener.ora) 8 ネーミング・メソッドの構成 select * from V$PARAMETER
NAME VALUE
active_instance_count
aq_tm_processes 0
archive_lag_target 0
asm_diskgroups
asm_diskstring
asm_power_limit 1
asm_preferred_read_failure_groups
audit_file_dest C:\ORACLEXE\APP\ORACLE\ADMIN\XE\ADUMP
audit_sys_operations FALSE
audit_trail NONE
background_core_dump partial
background_dump_dest C:\oraclexe\app\oracle\diag\rdbms\xe\xe\trace
backup_tape_io_slaves FALSE
bitmap_merge_area_size 1048576
blank_trimming FALSE
buffer_pool_keep
buffer_pool_recycle
cell_offload_compaction ADAPTIVE
cell_offload_decryption TRUE
cell_offload_parameters
cell_offload_plan_display AUTO
cell_offload_processing TRUE
circuits
client_result_cache_lag 3000
client_result_cache_size 0
cluster_database FALSE
cluster_database_instances 1
cluster_interconnects
commit_logging
commit_point_strength 1
commit_wait
commit_write
compatible 11.2.0.0.0
control_file_record_keep_time 7
control_files C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF
control_management_pack_access NONE
core_dump_dest C:\oraclexe\app\oracle\diag\rdbms\xe\xe\cdump
cpu_count 4
create_bitmap_area_size 8388608
create_stored_outlines
cursor_bind_capture_destination memory+disk
cursor_sharing EXACT
cursor_space_for_time FALSE
db_16k_cache_size 0
db_2k_cache_size 0
db_32k_cache_size 0
db_4k_cache_size 0
db_8k_cache_size 0
db_block_buffers 0
db_block_checking FALSE
db_block_checksum TYPICAL
db_block_size 8192
db_cache_advice ON
db_cache_size 0
db_create_file_dest
db_create_online_log_dest_1
db_create_online_log_dest_2
db_create_online_log_dest_3
db_create_online_log_dest_4
db_create_online_log_dest_5
db_domain
db_file_multiblock_read_count 128
db_file_name_convert
db_files 200
db_flash_cache_file
db_flash_cache_size 0
db_flashback_retention_target 1440
db_keep_cache_size 0
db_lost_write_protect NONE
db_name XE
db_recovery_file_dest C:\oraclexe\app\oracle\fast_recovery_area
db_recovery_file_dest_size 10737418240
db_recycle_cache_size 0
db_securefile PERMITTED
db_ultra_safe OFF
db_unique_name XE
db_unrecoverable_scn_tracking TRUE
db_writer_processes 1
dbwr_io_slaves 0
ddl_lock_timeout 0
deferred_segment_creation TRUE
dg_broker_start FALSE
diagnostic_dest C:\ORACLEXE\APP\ORACLE
disk_asynch_io TRUE
dispatchers (PROTOCOL=TCP) (SERVICE=XEXDB)
distributed_lock_timeout 60
dml_locks 756
dst_upgrade_insert_conv TRUE
enable_ddl_logging FALSE
event
fal_client
fal_server
fast_start_io_target 0
fast_start_mttr_target 0
fast_start_parallel_rollback LOW
file_mapping FALSE
fileio_network_adapters
filesystemio_options
fixed_date
gcs_server_processes 0
global_context_pool_size
global_names FALSE
global_txn_processes 1
hash_area_size 131072
hi_shared_memory_address 0
hs_autoregister TRUE
ifile
instance_groups
instance_name xe
instance_number 0
instance_type RDBMS
java_jit_enabled TRUE
java_max_sessionspace_size 0
java_pool_size 0
java_soft_sessionspace_limit 0
job_queue_processes 4
large_pool_size 0
ldap_directory_access NONE
ldap_directory_sysauth no
license_max_sessions 0
license_max_users 0
license_sessions_warning 0
listener_networks
local_listener
lock_name_space
lock_sga FALSE
log_archive_config
log_archive_dest
log_archive_dest_1
log_archive_dest_10
log_archive_dest_11
log_archive_dest_12
log_archive_dest_13
log_archive_dest_14
log_archive_dest_15
log_archive_dest_16
log_archive_dest_17
log_archive_dest_18
log_archive_dest_19
log_archive_dest_2
log_archive_dest_20
log_archive_dest_21
log_archive_dest_22
log_archive_dest_23
log_archive_dest_24
log_archive_dest_25
log_archive_dest_26
log_archive_dest_27
log_archive_dest_28
log_archive_dest_29
log_archive_dest_3
log_archive_dest_30
log_archive_dest_31
log_archive_dest_4
log_archive_dest_5
log_archive_dest_6
log_archive_dest_7
log_archive_dest_8
log_archive_dest_9
log_archive_dest_state_1 enable
log_archive_dest_state_10 enable
log_archive_dest_state_11 enable
log_archive_dest_state_12 enable
log_archive_dest_state_13 enable
log_archive_dest_state_14 enable
log_archive_dest_state_15 enable
log_archive_dest_state_16 enable
log_archive_dest_state_17 enable
log_archive_dest_state_18 enable
log_archive_dest_state_19 enable
log_archive_dest_state_2 enable
log_archive_dest_state_20 enable
log_archive_dest_state_21 enable
log_archive_dest_state_22 enable
log_archive_dest_state_23 enable
log_archive_dest_state_24 enable
log_archive_dest_state_25 enable
log_archive_dest_state_26 enable
log_archive_dest_state_27 enable
log_archive_dest_state_28 enable
log_archive_dest_state_29 enable
log_archive_dest_state_3 enable
log_archive_dest_state_30 enable
log_archive_dest_state_31 enable
log_archive_dest_state_4 enable
log_archive_dest_state_5 enable
log_archive_dest_state_6 enable
log_archive_dest_state_7 enable
log_archive_dest_state_8 enable
log_archive_dest_state_9 enable
log_archive_duplex_dest
log_archive_format ARC%S_%R.%T
log_archive_local_first TRUE
log_archive_max_processes 4
log_archive_min_succeed_dest 1
log_archive_start FALSE
log_archive_trace 0
log_buffer 5357568
log_checkpoint_interval 0
log_checkpoint_timeout 1800
log_checkpoints_to_alert FALSE
log_file_name_convert
max_dispatchers
max_dump_file_size unlimited
max_enabled_roles 150
max_shared_servers
memory_max_target 1073741824
memory_target 1073741824
nls_calendar GREGORIAN
nls_comp BINARY
nls_currency \
nls_date_format RR-MM-DD
nls_date_language JAPANESE
nls_dual_currency \
nls_iso_currency JAPAN
nls_language JAPANESE
nls_length_semantics BYTE
nls_nchar_conv_excp FALSE
nls_numeric_characters .,
nls_sort BINARY
nls_territory JAPAN
nls_time_format HH24:MI:SSXFF
nls_time_tz_format HH24:MI:SSXFF TZR
nls_timestamp_format RR-MM-DD HH24:MI:SSXFF
nls_timestamp_tz_format RR-MM-DD HH24:MI:SSXFF TZR
O7_DICTIONARY_ACCESSIBILITY FALSE
object_cache_max_size_percent 10
object_cache_optimal_size 102400
olap_page_pool_size 0
open_cursors 300
open_links 4
open_links_per_instance 4
optimizer_capture_sql_plan_baselines FALSE
optimizer_dynamic_sampling 2
optimizer_features_enable 11.2.0.2
optimizer_index_caching 0
optimizer_index_cost_adj 100
optimizer_mode ALL_ROWS
optimizer_secure_view_merging TRUE
optimizer_use_invisible_indexes FALSE
optimizer_use_pending_statistics FALSE
optimizer_use_sql_plan_baselines TRUE
os_authent_prefix OPS$
os_roles FALSE
parallel_adaptive_multi_user TRUE
parallel_automatic_tuning FALSE
parallel_degree_limit CPU
parallel_degree_policy MANUAL
parallel_execution_message_size 16384
parallel_force_local FALSE
parallel_instance_group
parallel_io_cap_enabled FALSE
parallel_max_servers 0
parallel_min_percent 0
parallel_min_servers 0
parallel_min_time_threshold AUTO
parallel_server FALSE
parallel_server_instances 1
parallel_servers_target 64
parallel_threads_per_cpu 2
permit_92_wrap_format TRUE
pga_aggregate_target 0
plscope_settings IDENTIFIERS:NONE
plsql_ccflags
plsql_code_type INTERPRETED
plsql_debug FALSE
plsql_optimize_level 2
plsql_v2_compatibility FALSE
plsql_warnings DISABLE:ALL
pre_page_sga FALSE
processes 100
query_rewrite_enabled TRUE
query_rewrite_integrity enforced
rdbms_server_dn
read_only_open_delayed FALSE
recovery_parallelism 0
recyclebin OFF
redo_transport_user
remote_dependencies_mode TIMESTAMP
remote_listener
remote_login_passwordfile EXCLUSIVE
remote_os_authent FALSE
remote_os_roles FALSE
replication_dependency_tracking TRUE
resource_limit FALSE
resource_manager_cpu_allocation 4
resource_manager_plan
result_cache_max_result 5
result_cache_max_size 0
result_cache_mode MANUAL
result_cache_remote_expiration 0
resumable_timeout 0
rollback_segments
sec_case_sensitive_logon TRUE
sec_max_failed_login_attempts 10
sec_protocol_error_further_action CONTINUE
sec_protocol_error_trace_action TRACE
sec_return_server_release_banner FALSE
serial_reuse disable
service_names XE
session_cached_cursors 50
session_max_open_files 10
sessions 172
sga_max_size 645922816
sga_target 0
shadow_core_dump none
shared_memory_address 0
shared_pool_reserved_size 9437184
shared_pool_size 0
shared_server_sessions
shared_servers 4
skip_unusable_indexes TRUE
smtp_out_server
sort_area_retained_size 0
sort_area_size 65536
spfile C:\ORACLEXE\APP\ORACLE\PRODUCT\11.2.0\
SERVER\DBS\SPFILEXE.ORA
sql_trace FALSE
sql92_security FALSE
sqltune_category DEFAULT
standby_archive_dest %ORACLE_HOME%\RDBMS
standby_file_management MANUAL
star_transformation_enabled FALSE
statistics_level TYPICAL
streams_pool_size 0
tape_asynch_io TRUE
thread 0
timed_os_statistics 0
timed_statistics TRUE
trace_enabled TRUE
tracefile_identifier
transactions 189
transactions_per_rollback_segment 5
undo_management AUTO
undo_retention 900
undo_tablespace UNDOTBS1
use_indirect_data_buffers FALSE
use_large_pages TRUE
user_dump_dest C:\oraclexe\app\oracle\diag\rdbms\xe\xe\trace
utl_file_dir
workarea_size_policy AUTO
xml_db_events enable
この中で、"XE" という文字列が含まれているのは以上です

db_name	XE
db_unique_name	XE
instance_name	xe
service_names	XE




posted by lightbox at 2014-05-09 10:18 | Oracle | このブログの読者になる | 更新情報をチェックする

2014年05月08日


VBScript : Oracle Database Express Edition 11g Release 2 に MDB(販売管理C) のデータをインポートする

hanbaic.zip


販売管理C.mdb は、Access2003 以前の形式の Microsoft Access のデータベースですが、Microsoft Office 製品で作成したのでは無く、ADODB.Connection や ADOX.Catalog を使用して Windows の基本機能で作成したものです。



今回、こちらでテストした PostgreSQL の正確なバージョンは、『Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production』です。
※ 実際は、通常の Oracle 11g のインストールされた 10台ほどの Windows7(32ビット) PC でもテストしました

hanbaiC_oracle11g_nvarchar.vbs
' ************************************************
' 管理者権限でコマンドプロンプトで実行を強制して、
' 最後に pause する
' ************************************************
Set Shell = CreateObject("Shell.Application")
Set WshShell = Wscript.CreateObject("WScript.Shell")
if Wscript.Arguments.Count = 0 then
	ScriptFullName = WScript.ScriptFullName
	Shell.ShellExecute "cmd.exe", "/c cscript.exe """ & ScriptFullName & """ dummy_param & pause", "", "runas", 1
	WScript.Quit
end if

' ************************************************
' 基本設定
' Microsoft ODBC for Oracle で実行できます
' DSN を作成して動作確認して指定して下さい
' ( 参考:http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view&no=225&type=ref )
' ************************************************
' このスクリプトが存在するディレクトリを取得
strCurDir = WScript.ScriptFullName
strCurDir = Replace( strCurDir, WScript.ScriptName, "" )
strMdbPath = strCurDir & "販売管理C.mdb"

' Oracle のホスト文字列
' ( ローカル・ネット・サービス名 )
strTarget = "{Oracle in XE}"	' ODBC ドライバ
strDBQ = "localhost:1521/XE"	' ネット・サービス名として XE のみでも OK
' スキーマ(ユーザ)
strSc = "lightbox"
' パスワード
strPwd = InputBox("パスワードを入力して下さい")

strDummy = "DUMMY" & Replace(Date,"/","") & Replace(Time,":","")

strMessage = "対象 MDB は " & strMdbPath & "です" & vbCrLf & vbCrLf

strMessage = strMessage & "▼ Oracleの環境です" & vbCrLf
strMessage = strMessage & "ODBC ドライバ : " & strTarget & vbCrLf
strMessage = strMessage & "インスタンス : " & strDBQ & vbCrLf
strMessage = strMessage & "USER(スキーマ) : " & strSc & vbCrLf
strMessage = strMessage & "PASS : " & strPwd & vbCrLf & vbCrLf
strMessage = strMessage & "一時テーブル : " & strDummy & vbCrLf & vbCrLf

strMessage = strMessage & "既にテーブルが存在する場合はメッセージが出ません" & vbCrLf
strMessage = strMessage & "それ以外ではエラーメッセージが出ますが、問題ありません"
if vbCancel = MsgBox( strMessage, vbOkCancel ) then
	Wscript.Quit
end if

' ************************************************
' 処理用文字列設定
' ************************************************
' MDB の接続文字列
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strMdbPath & ";"

' Microsoft の Oracle 用 ODBC ドライバの接続文字列 (1)
strConnectOracle = _
"[ODBC;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd & "]"

' Microsoft の Oracle 用 ODBC ドライバの接続文字列 (2)
strConnectOracle2 = _
"Provider=MSDASQL;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd

' ************************************************
' 初期処理
' ************************************************
Set Cn = CreateObject("ADODB.Connection")
Set Cn2 = CreateObject("ADODB.Connection")
Cn.Open strConnectMdb
Cn2.Open strConnectOracle2

' ************************************************
' コード名称マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	区分 NUMBER(4,0)" & _
"	,コード NVARCHAR2(10)" & _
"	,名称 NVARCHAR2(50)" & _
"	,数値1 NUMBER(8,0)" & _
"	,数値2 NUMBER" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(区分,コード)" & _
")"
Call OracleTransfer( "コード名称マスタ", "[コード名称マスタ]", Query )

' ************************************************
' コントロールマスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	キー NVARCHAR2(1)" & _
"	,売上日付 DATE" & _
"	,売上伝票 NUMBER(8,0)" & _
"	,会社名 NVARCHAR2(50)" & _
"	,組織コード NVARCHAR2(4)" & _
"	,起算月 NUMBER(2,0)" & _
"	,primary key(キー)" & _
")"
Call OracleTransfer( "コントロールマスタ","[コントロールマスタ]", Query )

' ************************************************
' メッセージマスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	コード NVARCHAR2(4)" & _
"	,メッセージ NVARCHAR2(100)" & _
"	,primary key(コード)" & _
")"
Call OracleTransfer( "メッセージマスタ","[メッセージマスタ]", Query )

' ************************************************
' 取引データ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	取引区分 NVARCHAR2(2)" & _
"	,伝票番号 NUMBER(8,0)" & _
"	,行 NUMBER(2,0)" & _
"	,取引日付 DATE" & _
"	,取引先コード NVARCHAR2(4)" & _
"	,商品コード NVARCHAR2(4)" & _
"	,数量 NUMBER" & _
"	,単価 NUMBER" & _
"	,金額 NUMBER" & _
"	,更新済 NVARCHAR2(1)" & _
"	,primary key(取引区分,伝票番号,行)" & _
")"
Call OracleTransfer( "取引データ","[取引データ]", Query )

' ************************************************
' 商品マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	商品コード NVARCHAR2(4)" & _
"	,商品名 NVARCHAR2(50)" & _
"	,在庫評価単価 NUMBER" & _
"	,販売単価 NUMBER" & _
"	,商品分類 NVARCHAR2(3)" & _
"	,商品区分 NVARCHAR2(1)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,備考 NVARCHAR2(2000)" & _
"	,削除フラグ NVARCHAR2(1)" & _
"	,primary key(商品コード)" & _
")"
Call OracleTransfer( "商品マスタ","[商品マスタ]", Query )

' ************************************************
' 商品分類マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	商品分類 NVARCHAR2(3)" & _
"	,名称 NVARCHAR2(50)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(商品分類)" & _
")"
Call OracleTransfer( "商品分類マスタ","[商品分類マスタ]", Query )

' ************************************************
' 得意先マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	得意先コード NVARCHAR2(4)" & _
"	,得意先名 NVARCHAR2(50)" & _
"	,得意先区分 NVARCHAR2(1)" & _
"	,担当者 NVARCHAR2(4)" & _
"	,郵便番号 NVARCHAR2(7)" & _
"	,住所1 NVARCHAR2(100)" & _
"	,住所2 NVARCHAR2(100)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,締日 NUMBER(2,0)" & _
"	,締日区分 NUMBER(1,0)" & _
"	,支払日 NUMBER(2,0)" & _
"	,備考 NVARCHAR2(100)" & _
"	,primary key(得意先コード)" & _
")"
Call OracleTransfer( "得意先マスタ","[得意先マスタ]", Query )

' ************************************************
' 社員マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	社員コード NVARCHAR2(4)" & _
"	,氏名 NVARCHAR2(50)" & _
"	,フリガナ NVARCHAR2(50)" & _
"	,所属 NVARCHAR2(4)" & _
"	,性別 NUMBER(1,0)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 NUMBER" & _
"	,手当 NUMBER" & _
"	,管理者 NVARCHAR2(4)" & _
"	,生年月日 DATE" & _
"	,primary key(社員コード)" & _
")"
Call OracleTransfer( "社員マスタ","[社員マスタ]", Query )

' ************************************************
' 郵便番号マスタ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	郵便番号 NVARCHAR2(7)" & _
"	,都道府県名カナ NVARCHAR2(255)" & _
"	,市区町村名カナ NVARCHAR2(255)" & _
"	,町域名カナ NVARCHAR2(255)" & _
"	,都道府県名 NVARCHAR2(255)" & _
"	,市区町村名 NVARCHAR2(255)" & _
"	,町域名 NVARCHAR2(255)" & _
")"
Call OracleTransfer( "郵便番号マスタ","[郵便番号マスタ]", Query )

' ************************************************
' 入金予定データ
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	得意先コード NVARCHAR2(4)" & _
"	,支払日 DATE" & _
"	,伝票合計金額 NUMBER(10,0)" & _
"	,伝票番号 NUMBER(10,0)" & _
")"
Call OracleTransfer( "入金予定データ","[入金予定データ]", Query )

' ************************************************
' 商品集計
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	商品コード NVARCHAR2(4)" & _
"	,経過月 NUMBER(2,0)" & _
"	,当月売上数量 NUMBER(10,0)" & _
"	,当月売上金額 NUMBER(10,0)" & _
"	,更新日 DATE" & _
"	,組織コード NVARCHAR2(4)" & _
"	,primary key(商品コード,経過月)" & _
")"
Call OracleTransfer( "商品集計","[商品集計]", Query )

' ************************************************
' 得意先集計
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	請求先 NVARCHAR2(4)" & _
"	,経過月 NUMBER(2,0)" & _
"	,当月売上金額 NUMBER(10,0)" & _
"	,更新日 DATE" & _
"	,組織コード NVARCHAR2(4)" & _
"	,primary key(請求先,経過月)" & _
")"
Call OracleTransfer( "得意先集計","[得意先集計]", Query )

' ************************************************
' 社員変更履歴
' ************************************************
Query = _
"create table " & strDummy & " (" & _
"	社員コード NVARCHAR2(4)" & _
"	,氏名 NVARCHAR2(50)" & _
"	,フリガナ NVARCHAR2(50)" & _
"	,所属 NVARCHAR2(4)" & _
"	,性別 NUMBER(1,0)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 NUMBER" & _
"	,手当 NUMBER" & _
"	,管理者 NVARCHAR2(4)" & _
"	,生年月日 DATE" & _
")"
Call OracleTransfer( "社員変更履歴","[社員変更履歴]", Query )

' ************************************************
' ビュー
' ************************************************
Query = _
"create or replace view V_商品一覧 as" & _
"	SELECT 商品マスタ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 商品マスタ.販売単価" & _
"	, 商品分類マスタ.商品分類" & _
"	, 商品分類マスタ.名称 AS 分類名" & _
"	, 商品マスタ.商品区分" & _
"	, コード名称マスタ.名称 AS 区分名" & _
" from" & _
"	(商品マスタ LEFT JOIN 商品分類マスタ" & _
"	ON 商品マスタ.商品分類 = 商品分類マスタ.商品分類" & _
"	) LEFT JOIN コード名称マスタ" & _
"	ON 商品マスタ.商品区分 = コード名称マスタ.コード" & _
" where" & _
"	コード名称マスタ.区分 = 3 and 削除フラグ is NULL"
RunOracle( Query )

Query = _
"create or replace view V_売上日付 as" & _
"	SELECT コントロールマスタ.売上日付" & _
"	FROM コントロールマスタ" & _
"	WHERE コントロールマスタ.キー = '1'"
RunOracle( Query )

Query = _
"create or replace view V_得意先台帳 as" & _
"	SELECT 取引データ.取引先コード" & _
"	, 得意先マスタ.得意先名" & _
"	, 取引データ.取引日付" & _
"	, 取引データ.取引区分" & _
"	, 取引データ.伝票番号" & _
"	, 取引データ.行" & _
"	, 取引データ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 取引データ.数量" & _
"	, 取引データ.単価" & _
"	, 取引データ.金額" & _
" from" & _
"	(取引データ INNER JOIN 商品マスタ" & _
"	ON 取引データ.商品コード=商品マスタ.商品コード" & _
"	) INNER JOIN 得意先マスタ" & _
"	ON 取引データ.取引先コード=得意先マスタ.得意先コード" & _
" where" & _
"	取引データ.取引区分 = '10'"
RunOracle( Query )

Query = _
"create or replace view V_社員一覧 as" & _
" select 社員コード" & _
"	,氏名" & _
"	,フリガナ" & _
"	,名称1.名称 as 性別" & _
"	,所属" & _
"	,名称2.名称 as 所属名" & _
" from 社員マスタ" & _
"	,コード名称マスタ 名称1" & _
"	,コード名称マスタ 名称2" & _
" where to_char(性別) = 名称1.コード" & _
"   and 名称1.区分 = 1" & _
"   and 所属 = 名称2.コード" & _
"   and 名称2.区分 = 2"
RunOracle( Query )

Query = _
"create or replace view" & _
"	PROC_ERROR" & _
" as" & _
" select * " & _
" from USER_ERRORS"
RunOracle( Query )

Query = _
"create or replace view" & _
"	PROC_LIST" & _
" as" & _
" select OBJECT_NAME as ""プロシージャ名"" " & _
"	,STATUS as ""状態""  " & _
"	,OBJECT_TYPE  as ""タイプ"" " & _
"	,CREATED  as ""作成日"" " & _
"	,LAST_DDL_TIME  as ""更新日"" " & _
" from USER_OBJECTS " & _
" where OBJECT_TYPE in ('FUNCTION','PROCEDURE') "
RunOracle( Query )

Query = _
"create or replace view" & _
"	PROC_TEXT" & _
" as" & _
" select * from USER_SOURCE"
RunOracle( Query )

' ************************************************
' 終了
' ************************************************

Cn2.Close
Cn.Close

Wscript.Echo "処理が終了しました"

' ************************************************
' Oracle 転送
' ************************************************
function OracleTransfer( strTarget, strTable, QueryCreate )

	Dim Query

	Query = "drop table " & strTarget
	RunOracle( Query )

	RunOracle( QueryCreate )

	Query = "insert into " & strConnectOracle & "." & strDummy & _
	" select * from " & strTable

	RunMdb( Query )

	Query = "alter table " & strDummy & " rename to " & strTarget
	RunOracle( Query )

end function

' ************************************************
' MDB 実行
' ************************************************
function RunMdb( Query )

	on error resume next
	Cn.Execute Query
	if Err.Number <> 0then
		Wscript.Echo Err.Description & vbCrLf & Query
	end if
	on error goto 0

end function

' ************************************************
' Oracle 実行
' ************************************************
function RunOracle( Query )

	on error resume next
	Cn2.Execute Query
	if Err.Number <> 0then
		Wscript.Echo Err.Description & vbCrLf & Query
	end if
	on error goto 0

end function


管理者権限でコマンドプロンプトで実行を強制

この処理では必要ありませんが、昨今いろいろそういう場面に遭遇する事が多く、今後の為にと実装しました。コマンドブロンプトで実行した後は、PAUSE によって処理は一旦停止し、コマンドプロンプトのウインドウは閉じずに残ります。

▼ 管理者実行の確認の後のパスワード入力


▼ 内容の確認ダイアログ


※ 初回実行はテーブルが無いのでエラーメッセージが出ますが、問題はありません

▼ 2回目以降の表示


▼ 実行後のテーブルとビュー



処理手順(1) : テーブル作成

テーブルを CREATE 文を使って、Oracle に接続して実行します。
Oracle ODBC ドライバのパラメータは、『E 26 Oracle ODBC Driverの使用』を参照して下さい。接続文字列そのものは、『8.1 簡易接続ネーミング・メソッドの使用』を参照して下さい。
※ Oracle のマニュアルと言えど、全てが正しく記述されている保証はありません。バージョンの推移やアップデートや現実にドキュメントが全て追いついていない(精査されていない)可能性もあります。
※ 一般の Oracle で簡易接続ネーミング・メソッドが使え無い場合は、Net Configuration Assistant のネーミングメソッド構成で追加して下さい
※ Oracle の基本情報は、select * from V$PARAMETER を実行した内容と、レジストリの内容を確認するとたいていは得られるはずです。
' Oracle のホスト文字列
' ( ローカル・ネット・サービス名 )
strTarget = "{Oracle in XE}"	' ODBC ドライバ
strDBQ = "localhost:1521/XE"	' ネット・サービス名として XE のみでも OK
' スキーマ(ユーザ)
strSc = "lightbox"
' パスワード
strPwd = InputBox("パスワードを入力して下さい")

' Microsoft の Oracle 用 ODBC ドライバの接続文字列 (2)
strConnectOracle2 = _
"Provider=MSDASQL;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd


処理手順(2) : インポート

現実には、MDB へ接続して行うエクスポート処理となります。Microsoft Access では、in 構文によって、Access 内から ODBC を使って直接他のデータベースのテーブルを内部デーブルのように参照できるので、
insert into [Oracleのテーブル] select * from [MDB内のテーブル] というSQL文を実行してエクスポートが可能です。

但し、Oracle の ODBC ドライバは バグ(?) があるらしく、複数のスキーマに同一名のテーブルがあるとエラーになるので(バグと言うより、他の DB と構造が違う為)、毎回ダミーのテーブルを作成してインポートして名前変更しています。
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strMdbPath & ";"

strConnectOracle = _
"[ODBC;Driver=" & strTarget & ";DBQ=" & strDBQ &";UID=" & strSc & ";PWD=" & strPwd & "]"


処理手順(3) : VIEW作成

VIEW の作成は、Oracle への接続で行います


関連する記事


posted by lightbox at 2014-05-08 21:20 | VBS + ADO | このブログの読者になる | 更新情報をチェックする

VBScript : PostgreSQL(9.3.4) に MDB(販売管理C) のデータをインポートする

hanbaic_postgreSQL.zip


販売管理C.mdb は、Access2003 以前の形式の Microsoft Access のデータベースですが、Microsoft Office 製品で作成したのでは無く、ADODB.Connection や ADOX.Catalog を使用して Windows の基本機能で作成したものです。



今回、こちらでテストした PostgreSQL の正確なバージョンは、『PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit』です。

hanbaiC_postgres.vbs
' ************************************************
' 管理者権限でコマンドプロンプトで実行を強制して、
' 最後に pause する
' ************************************************
Set Shell = CreateObject("Shell.Application")
Set WshShell = Wscript.CreateObject("WScript.Shell")
if Wscript.Arguments.Count = 0 then
	ScriptFullName = WScript.ScriptFullName
	Shell.ShellExecute "cmd.exe", "/c cscript.exe """ & ScriptFullName & """ dummy_param & pause", "", "runas", 1
	WScript.Quit
end if

' ************************************************
' 基本設定
' ************************************************
' このスクリプトが存在するディレクトリを取得
Set Fso = CreateObject( "Scripting.FileSystemObject" )
strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurDir = obj.Path
strMdbPath = strCurDir & "\販売管理C.mdb"

strTarget = "{PostgreSQL ODBC Driver(UNICODE)}"	' ODBC ドライバ
strServer = "localhost"
strPort = "5432"
strDB = "lightbox"
strUser = "postgres"
strPass = InputBox("パスワードを入力して下さい")


strMessage = "対象 MDB は " & strMdbPath & "です" & vbCrLf & vbCrLf

strMessage = strMessage & "▼ PostgreSQLの環境です" & vbCrLf
strMessage = strMessage & "ODBC ドライバ : " & strTarget & vbCrLf
strMessage = strMessage & "Server : " & strServer & vbCrLf
strMessage = strMessage & "Port : " & strPort & vbCrLf
strMessage = strMessage & "DB : " & strDB & vbCrLf
strMessage = strMessage & "USER : " & strUser & vbCrLf
strMessage = strMessage & "PASS : " & strPass & vbCrLf & vbCrLf

strMessage = strMessage & "既にテーブルが存在する場合はメッセージが出ません" & vbCrLf
strMessage = strMessage & "それ以外ではエラーメッセージが出ますが、問題ありません"
if vbCancel = MsgBox( strMessage, vbOkCancel ) then
	Wscript.Quit
end if

' ************************************************
' 処理用文字列設定
' ************************************************
' MDB の接続文字列
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strMdbPath & ";"

strConnectPS = _
	" in '' [ODBC" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";]" 

strConnectPS2 = _
	"Provider=MSDASQL" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";" 

' ************************************************
' 初期処理
' ************************************************
Set Cn = CreateObject("ADODB.Connection")
Set Cn2 = CreateObject("ADODB.Connection")
Cn.Open strConnectMdb
Cn2.Open strConnectPS2

RunSS( "drop view V_商品一覧" )
RunSS( "drop view V_売上日付" )
RunSS( "drop view V_得意先台帳" )
RunSS( "drop view V_社員一覧" )

' ************************************************
' コード名称マスタ
' ************************************************
Query = _
"create table コード名称マスタ (" & _
"	区分 INT" & _
"	,コード VARCHAR(10)" & _
"	,名称 VARCHAR(50)" & _
"	,数値1 INT" & _
"	,数値2 INT" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(区分,コード)" & _
")"
Call SSTransfer( "コード名称マスタ", Query )

' ************************************************
' コントロールマスタ
' ************************************************
Query = _
"create table コントロールマスタ (" & _
"	キー VARCHAR(1)" & _
"	,売上日付 DATE" & _
"	,売上伝票 INT" & _
"	,会社名 VARCHAR(50)" & _
"	,組織コード VARCHAR(4)" & _
"	,起算月 INT" & _
"	,primary key(キー)" & _
")"
Call SSTransfer( "コントロールマスタ", Query )

' ************************************************
' メッセージマスタ
' ************************************************
Query = _
"create table メッセージマスタ (" & _
"	コード VARCHAR(4)" & _
"	,メッセージ VARCHAR(100)" & _
"	,primary key(コード)" & _
")"
Call SSTransfer( "メッセージマスタ", Query )

' ************************************************
' 取引データ
' ************************************************
Query = _
"create table 取引データ (" & _
"	取引区分 VARCHAR(2)" & _
"	,伝票番号 INT" & _
"	,行 INT" & _
"	,取引日付 DATE" & _
"	,取引先コード VARCHAR(4)" & _
"	,商品コード VARCHAR(4)" & _
"	,数量 INT" & _
"	,単価 INT" & _
"	,金額 INT" & _
"	,更新済 VARCHAR(1)" & _
"	,primary key(取引区分,伝票番号,行)" & _
")"
Call SSTransfer( "取引データ", Query )

' ************************************************
' 商品マスタ
' ************************************************
Query = _
"create table 商品マスタ (" & _
"	商品コード VARCHAR(4)" & _
"	,商品名 VARCHAR(50)" & _
"	,在庫評価単価 INT" & _
"	,販売単価 INT" & _
"	,商品分類 VARCHAR(3)" & _
"	,商品区分 VARCHAR(1)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,備考 VARCHAR(2000)" & _
"	,削除フラグ VARCHAR(1)" & _
"	,primary key(商品コード)" & _
")"
Call SSTransfer( "商品マスタ", Query )

' ************************************************
' 商品分類マスタ
' ************************************************
Query = _
"create table 商品分類マスタ (" & _
"	商品分類 VARCHAR(3)" & _
"	,名称 VARCHAR(50)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,primary key(商品分類)" & _
")"
Call SSTransfer( "商品分類マスタ", Query )

' ************************************************
' 得意先マスタ
' ************************************************
Query = _
"create table 得意先マスタ (" & _
"	得意先コード VARCHAR(4)" & _
"	,得意先名 VARCHAR(50)" & _
"	,得意先区分 VARCHAR(1)" & _
"	,担当者 VARCHAR(4)" & _
"	,郵便番号 VARCHAR(7)" & _
"	,住所1 VARCHAR(100)" & _
"	,住所2 VARCHAR(100)" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,締日 INT" & _
"	,締日区分 INT" & _
"	,支払日 INT" & _
"	,備考 VARCHAR(100)" & _
"	,primary key(得意先コード)" & _
")"
Call SSTransfer( "得意先マスタ", Query )

' ************************************************
' 社員マスタ
' ************************************************
Query = _
"create table 社員マスタ (" & _
"	社員コード VARCHAR(4)" & _
"	,氏名 VARCHAR(50)" & _
"	,フリガナ VARCHAR(50)" & _
"	,所属 VARCHAR(4)" & _
"	,性別 INT" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 INT" & _
"	,手当 INT" & _
"	,管理者 VARCHAR(4)" & _
"	,生年月日 DATE" & _
"	,primary key(社員コード)" & _
")"
Call SSTransfer( "社員マスタ", Query )

' ************************************************
' 郵便番号マスタ
' ************************************************
Query = _
"create table 郵便番号マスタ (" & _
"	郵便番号 VARCHAR(7)" & _
"	,都道府県名カナ VARCHAR(255)" & _
"	,市区町村名カナ VARCHAR(255)" & _
"	,町域名カナ VARCHAR(255)" & _
"	,都道府県名 VARCHAR(255)" & _
"	,市区町村名 VARCHAR(255)" & _
"	,町域名 VARCHAR(255)" & _
")"
Call SSTransfer( "郵便番号マスタ", Query )

' ************************************************
' 入金予定データ
' ************************************************
Query = _
"create table 入金予定データ (" & _
"	得意先コード VARCHAR(4)" & _
"	,支払日 DATE" & _
"	,伝票合計金額 INT" & _
"	,伝票番号 INT" & _
")"
Call SSTransfer( "入金予定データ", Query )

' ************************************************
' 商品集計
' ************************************************
Query = _
"create table 商品集計 (" & _
"	商品コード VARCHAR(4)" & _
"	,経過月 INT" & _
"	,当月売上数量 INT" & _
"	,当月売上金額 INT" & _
"	,更新日 DATE" & _
"	,組織コード VARCHAR(4)" & _
"	,primary key(商品コード,経過月)" & _
")"
Call SSTransfer( "商品集計", Query )

' ************************************************
' 得意先集計
' ************************************************
Query = _
"create table 得意先集計 (" & _
"	請求先 VARCHAR(4)" & _
"	,経過月 INT" & _
"	,当月売上金額 INT" & _
"	,更新日 DATE" & _
"	,組織コード VARCHAR(4)" & _
"	,primary key(請求先,経過月)" & _
")"
Call SSTransfer( "得意先集計", Query )

' ************************************************
' 社員変更履歴
' ************************************************
Query = _
"create table 社員変更履歴 (" & _
"	社員コード VARCHAR(4)" & _
"	,氏名 VARCHAR(50)" & _
"	,フリガナ VARCHAR(50)" & _
"	,所属 VARCHAR(4)" & _
"	,性別 INT" & _
"	,作成日 DATE" & _
"	,更新日 DATE" & _
"	,給与 INT" & _
"	,手当 INT" & _
"	,管理者 VARCHAR(4)" & _
"	,生年月日 DATE" & _
")"
Call SSTransfer( "社員変更履歴", Query )

' ************************************************
' ビュー
' ************************************************
Query = _
"create view V_商品一覧 as" & _
"	SELECT 商品マスタ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 商品マスタ.販売単価" & _
"	, 商品分類マスタ.商品分類" & _
"	, 商品分類マスタ.名称 AS 分類名" & _
"	, 商品マスタ.商品区分" & _
"	, コード名称マスタ.名称 AS 区分名" & _
" from" & _
"	(商品マスタ LEFT JOIN 商品分類マスタ" & _
"	ON 商品マスタ.商品分類 = 商品分類マスタ.商品分類" & _
"	) LEFT JOIN コード名称マスタ" & _
"	ON 商品マスタ.商品区分 = コード名称マスタ.コード" & _
" where" & _
"	コード名称マスタ.区分 = 3 and 削除フラグ is NULL"
RunSS( Query )

Query = _
"create view V_売上日付 as" & _
"	SELECT コントロールマスタ.売上日付" & _
"	FROM コントロールマスタ" & _
"	WHERE コントロールマスタ.キー = '1'"
RunSS( Query )

Query = _
"create view V_得意先台帳 as" & _
"	SELECT 取引データ.取引先コード" & _
"	, 得意先マスタ.得意先名" & _
"	, 取引データ.取引日付" & _
"	, 取引データ.取引区分" & _
"	, 取引データ.伝票番号" & _
"	, 取引データ.行" & _
"	, 取引データ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 取引データ.数量" & _
"	, 取引データ.単価" & _
"	, 取引データ.金額" & _
" from" & _
"	(取引データ INNER JOIN 商品マスタ" & _
"	ON 取引データ.商品コード=商品マスタ.商品コード" & _
"	) INNER JOIN 得意先マスタ" & _
"	ON 取引データ.取引先コード=得意先マスタ.得意先コード" & _
" where" & _
"	取引データ.取引区分 = '10'"
RunSS( Query )

Query = _
"create view V_社員一覧 as" & _
" select 社員コード" & _
"	,氏名" & _
"	,フリガナ" & _
"	,名称1.名称 as 性別" & _
"	,所属" & _
"	,名称2.名称 as 所属名" & _
" from 社員マスタ" & _
"	,コード名称マスタ 名称1" & _
"	,コード名称マスタ 名称2" & _
" where 性別 = CAST(名称1.コード as int4)" & _
"   and 名称1.区分 = 1" & _
"   and 所属 = 名称2.コード" & _
"   and 名称2.区分 = 2"
RunSS( Query )

' ************************************************
' 終了
' ************************************************

Cn2.Close
Cn.Close

Wscript.Echo "処理が終了しました"

' ************************************************
' PS 転送
' ************************************************
function SSTransfer( strTable, QueryCreate )

	Dim Query

	Query = "drop table " & strTable
	RunSS( Query )

	RunSS( QueryCreate )

	Query = "insert into " & strTable & " " & strConnectPS & _
	" select * from " & strTable
	RunMdb( Query )

end function

' ************************************************
' MDB 実行
' ************************************************
function RunMdb( Query )

	on error resume next
	Cn.Execute Query
	if Err.Number <> 0then
		Wscript.Echo Err.Description & vbCrLf & Query
	end if
	on error goto 0

end function

' ************************************************
' PS 実行
' ************************************************
function RunSS( Query )

	on error resume next
	Cn2.Execute Query
	if Err.Number <> 0then
		Wscript.Echo Err.Description & vbCrLf & Query
	end if
	on error goto 0

end function


管理者権限でコマンドプロンプトで実行を強制

この処理では必要ありませんが、昨今いろいろそういう場面に遭遇する事が多く、今後の為にと実装しました。コマンドブロンプトで実行した後は、PAUSE によって処理は一旦停止し、コマンドプロンプトのウインドウは閉じずに残ります。

▼ 管理者実行の確認の後のパスワード入力


▼ 内容の確認ダイアログ


▼ 初回実行はテーブルが無いのでエラーメッセージが出ますが、問題はありません


▼ 2回目以降の表示


▼ 実行後のテーブルとビュー



処理手順(1) : テーブル作成

テーブルを CREATE 文を使って、Postgres に接続して実行します。
strConnectPS2 = _
	"Provider=MSDASQL" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";" 


処理手順(2) : インポート

現実には、MDB へ接続して行うエクスポート処理となります。Microsoft Access では、in 構文によって、Access 内から ODBC を使って直接他のデータベースのテーブルを内部デーブルのように参照できるので、
insert into [PostgreSQLのテーブル] select * from [MDB内のテーブル] というSQL文を実行してエクスポートが可能です。
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strMdbPath & ";"

strConnectPS = _
	" in '' [ODBC" & _
	";Driver=" & strTarget & _
	";Servername=" & strServer & _
	";Port=" & strPort  & _
	";DATABASE=" & strDB & _
	";UID=" & strUser & _ 
	";PWD=" & strPass & _ 
	";]" 


処理手順(3) : VIEW作成

VIEW の作成は、PostgreSQL への接続で行います


関連する記事


posted by lightbox at 2014-05-08 15:32 | VBS + ADO | このブログの読者になる | 更新情報をチェックする

2014年05月05日


Eclipse + WindowBuilder : Design タブが表示されなくなった時の対処

原因は解りませんが、Eclipse がソースを標準のエディタで開いてしまっている事が原因なので、専用の WindowBuilder エディタで開き直すことで元に戻ります。同時に二つのエディタを使え無いので、いったん標準のエディタで開いたタブを閉じて、以下の位置より開きなおして下さい。



これについては、Eclipse の英文の FAQ で記述があります。

WindowBuilder Pro FAQ

上記リンク先に、メニューがあるので『What can I do if I don't see the Design tab when I edit a window?』をクリックします

Eclipse remembers the last editor type used with a file. If you don't see the Design tab, that means that you are using the standard Eclipse Java Editor rather than the WindowBuilder Editor. Open the file with the WindowBuilder Editor and you will see both the Source and Design tabs. Note that Eclipse will only let you have a file open with one editor at a time, so you may need to close any existing editor before opening it with the WindowBuilder Editor.
関連する記事


posted by lightbox at 2014-05-05 00:40 | Java | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり