当前位置: 代码迷 >> PB >> pb动态创建Access数据库,该怎么处理
  详细解决方案

pb动态创建Access数据库,该怎么处理

热度:307   发布时间:2016-04-29 05:13:56.0
pb动态创建Access数据库
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无法连接!')
halt;
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
MessageBox("",'数据库连接错误:'+ acc.SQLErrText)
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("" ,"创建表时错误:"+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

在网上找到一个方法,但是貌似时间太久远,在pb12中运行会报错,求高手指点一下
------解决思路----------------------
引用:
首先是报这个错误,然后我把IF appAccess.ConnectToNewObject("Access.Application.9") <> 0 THEN这句改成IF appAccess.ConnectToNewObject("Access.Application") <> 0 THEN,去掉了.9又报这个错误


你看一下access的版本,可以在控制面板里的组件里查看
------解决思路----------------------
直接打包上access文件,释放出来不行吗
  相关解决方案