global type f_createaccessdb from function_o b j e c t
end type
forward prototypes
global function integer f_createaccessdb ()
end prototypes
global function integer f_createaccessdb ();setpointer(hourglass!)
string dbname , gs_apppath
gs_apppath = getcurrentdirectory() //在程序根目下\data里建立数据库
dbname = 'myaccess' //想要建立的数据库名
if fileexists(GS_APPPATH + '\DATA\' + dbname + '.mdb' ) then
if messagebox('系统提示' , '数据库‘' + DBname + ' ’已经存在,是否覆盖?' , &
question! , yesno! , 2) = 1 then
filedelete(GS_APPPATH + '\DATA\' + dbname + '.mdb')
else
return -1
end if
end if
/**********************先建立一个mdb文件***************/
OLEObject appAccess
appAccess = CREATE OLEObject
IF appAccess.ConnectToNewObject("Access.Application.9") <> 0 THEN
MessageBox('OLE错误','OLE无法连接!')
return -1
END IF
appAccess.Visible = false
appAccess.NewCurrentDatabase(GS_APPPATH + '\DATA\' + dbname + '.mdb')
appAccess.Visible = false
appAccess.quit()
appAccess.DisConnectObject()
Destroy appAccess
/********************** end ***************/
/********************连接ACCESS数据库并添加表*************
//连上数据库
transaction acc
acc = create transaction
acc.DBMS = "ODBC"
acc.AutoCommit = true
acc.DBParm = "ConnectString='DRIVER=Driver do Microsoft Access (*.mdb);" + &
"UID=admin;" + &
"PWD=;" + &
"UserCommitSync=Yes;"+ &
"Threads=3;"+ &
"SafeTransactions=0;"+ &
"PageTimeout=5;"+ &
"MaxScanRows=8;"+ &
"MaxBufferSize=2048;"+ &
"FIL=MS Access;"+ &
"DriverId=25;"+ &
"DefaultDir= " + GS_APPPATH + "\DATA;"+ &
"DBQ=" + GS_APPPATH + "\DATA\" + dbname + ".MDB'"
connect using acc ;
if acc.sqlcode <> 0 then
msgbox(1,'数据库连接错误:'+ acc.sqlerrtext , 0)
filedelete(gs_apppath + '\data\' + dbname + '.mdb')
destroy acc
return -1
end if
//定义建表SQL语句子
string sqlstr[]
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE accvouch ( ino_id SMALLINT, dbill_date DATETIME, cbill VARCHAR(20), cperson VARCHAR(20), ccheck VARCHAR(20), cbook VARCHAR(20), cdigest VARCHAR(80), ccode VARCHAR(15), md CURRENCY, mc CURRENCY, cfee_id VARCHAR(80), citem_id VARCHAR(80), bcash BIT, coustomername VARCHAR(80), coustomerbankno VARCHAR(20), coustomerbank VARCHAR(80), cdept VARCHAR(60)) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE accvouchsub ( ino_id SMALLINT, citem VARCHAR(50), ncount CURRENCY, nprice CURRENCY, nje CURRENCY, nno SMALLINT) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE INDEX in_id ON accvouchsub (ino_id) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE customer (name VARCHAR(80), bankno VARCHAR(20), bank VARCHAR(80),Dcreate datetime , nUse integer) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE fee (cfee_id varchar(80), cfee_name VARCHAR(80), igrade SMALLINT, bend BIT, cmemo VARCHAR(120)) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE item (citem_id VARCHAR(8), citem_name VARCHAR(80), igrade SMALLINT, bend BIT, cmemo VARCHAR(120)) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE [memo] (id int, cmemo VARCHAR(255)) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE myuser (user_name VARCHAR(12), user_pass VARCHAR(20), user_id VARCHAR(3), power VARCHAR(20)) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE ysjfb ( cmaster VARCHAR(50), cdept VARCHAR(50), nno SMALLINT, citem VARCHAR(60), mje REAL, cmemo VARCHAR(200), bvouch BIT, dvouch DATETIME, cvouchno VARCHAR(10), badd SMALLINT, cfile VARCHAR(60)) ;"
sqlstr[ upperbound(sqlstr) + 1 ] = "CREATE TABLE zbdb (cdept VARCHAR(50), citem VARCHAR(60), mje REAL, cmemo VARCHAR(200), dvouch DATETIME, cvouchno VARCHAR(10), nno SMALLINT, cmemobig VARCHAR(255), ddate DATETIME, cbill VARCHAR(16), badd SMALLINT, cfile VARCHAR(60)) ;"
setpointer(hourglass!)
integer i , i_row
//执行语句
i_row = upperbound(sqlstr)
for i = 1 to i_row
execute immediate :sqlstr[i] using acc;
if acc.sqlcode <> 0 then
messagebox(left( sqlstr[i] , 30) ,"创建表时错误:"+acc.sqlerrtext)
disconnect using acc ;
filedelete(gs_apppath + '\data\' + dbname + '.mdb')
destroy acc
return -1
end if
next
commit using acc ;
disconnect using acc ;
connect using acc;
yield()
//创建成功
disconnect using acc ;
destroy acc
return 1
end function
浙公网安备 33010602011771号