Usar la base de datos de acceso para realizar un programa de instalación, urgente
Será mejor que coloques todos los archivos que necesitas (EXE, DLL, etc.) en la carpeta de instalación de tu propio programa, no en el directorio del sistema. Esto hace que sea más fácil moverlo y también registrarlo. fuente de datos.
Tengo un ejemplo de cómo registrar automáticamente una fuente de datos ODBC, que es la base de datos ACCESS registrada. Aunque no es PB8, es el mismo. Usemos el de PB8 como archivo DLL.
Función pública externa (función externa global)
//Obtener la ruta actual
Función pública Long GetCurrentDirectoryA(Long nBufferLength, ref string lpBuffer) biblioteca "kernel 32 ";
//Obtener la representación del año en el calendario lunar.
Función larga MyFormatLunarYear(iYear largo, texto de cadena de referencia) biblioteca "calendar.dll"
//Obtener la representación del calendario lunar de un día
Función larga MyGetLunarDate(long iYear, long iMonth, long iDay, ref long iLunarYear, ref long iLunarMonth, ref long iLunarDay) biblioteca "calendar.dll"
//Obtiene el número del término solar lunar de un día determinado.
Función de la biblioteca getjieqi larga (iAño largo, iMes largo, iDía largo) "calendar.dll"
1. Plan de día del mar.
/*<. /p>
Run_flag: indica si el sistema se está ejecutando por primera vez, 0 es la primera vez, para que el sistema pueda determinar si debe crear una nueva fuente de datos.
Dsn_def: fuente de datos predeterminada
Week_month: indica si la interfaz de entrada inicial se muestra en semanas o meses, 1 mes, dos semanas
Icon_flag: indica; si el tiempo de ejecución se muestra en una interfaz minimizada. 1-sí 0-no.
Iuser: El ID de usuario del último inicio de sesión.
Idiff: Diferencia del último inicio de sesión (empresa, familia, otro)
*/
[Público]
begin_year=2001
Año final=2005
año_paso=1
mes_paso=1
Curr_path=D:\pb\ día? Pai \pbl
semana_mes=1
[ini]
ini_flag=1
run_flag=1
dsn_def=dsn_sdp
icon_flag=0
iuser=jdh
idiff=1
2. ue_ini() devuelve (ninguno)<. /p>
//Establecer la fuente de datos predeterminada
Si len(trim(profileString(" sea day plan . ini ", " ini ", " dsn_def ", " "))) = 0
setprofileString(" plan del día del mar . ini ", " ini ", " dsn_def ", " dsn_sdp ")
Terminará si...
3. ue_outo_set_odbc() devuelve (ninguno)
/*Establece automáticamente la fuente de datos odbc
En palabras clave relacionadas con odbc:
HKEY _local_machine\software \ODBC\ ¿odbcinst.ini\ODBCDriver registra todos los ODBC instalados? ¿El controlador
HKEY_Local_Machine\Software\ODBC\odbcinst.ini registra varios ODBC? Información sobre el conductor.
HKEY_Current_User\Software\odbc\odbc.ini\ODBC Data Source registra los tipos de varias fuentes de datos.
HKEY _current_user\software\odbc\odbc.ini registra información detallada de varias fuentes de datos*/
String ls_sys[]
ls_sys[1]= " HKEY_LOCAL_MACHINE\Software\ODBC\ODBC inst.INI\ODBC Driver"
ls_sys[2]= "HKEY_LOCAL_MACHINE\Software\ ODBC\ODBC inst.ini "
ls_sys[3]= "HKEY_CurrentUser\ODBC\ODBC.ini\ODBCDataSource"
ls_sys[ 4]= "HKEY_Current User\Software\ODBC\ODBC. INI "
//Determine si Access está instalado en el sistema.
Cadena ls_install
RegistryGet(ls_sys[1], "Controlador de Microsoft Access(*.
mdb)", RegString!, ls_install)
if trim(ls_install)<>"Instalar" entonces
Messagebox("Error", "Microsoft Access no está instalado el controlador")
Detener
Terminará si...
//Obtener la ruta actual
Ruta de mínimos cuadrados de cadena
ls_curr_path = perfil string("plan del día en el mar. ini","public","curr_path","")
Si len(trim(ls_curr_path))= 0, entonces
Cuadro de mensaje ("Error", "¡Error del sistema al inicializar el archivo de ruta actual!")
Detener
Si... terminará
//Obtener el nombre de la fuente de datos predeterminada
Cadena ls_dsn
ls _ DSN = perfil cadena(" sea day plan . ini ", " ini ", " dsn_def ", "")
Si len(trim(ls_dsn))=0, entonces
Messagebox ("Error", "¡El sistema tiene un error en el archivo de inicialización de la fuente de datos!")
Detener
Terminará si...
//Modificar el registro
RegistrySet(ls_sys[3], ls_dsn, RegString!, "Microsoft Access Driver(*.MDB)")//Tipo de fuente de datos de registro.
RegistrySet(ls_sys[4]+"\"+ls_DSN,"DBQ",RegString!,ls_curr _ path+" \ sea _ day_plan.MDB ") // Registre los detalles de la fuente de datos.
conjunto de registros(ls_sys[4]+" \ "+ls_DSN, "Driver", RegString!, "C:\WINDOWS\SYSTEM\odbcjt32.dll")
conjunto de registros (ls_sys[4]+" \ "+ls_DSN,"FIL",RegString!,"MS Access")
RegistrySet(ls_sys[4]+" \ "+ls_DSN,"PWD",RegString! ,"sql")
conjunto de registros(ls_sys[4]+" \ "+ls_DSN,"UID",RegString!," dba")
ulong lu_driverid, lu_SafeTransactions p>
lu_driverid=25
lu_SafeTransactions=0
conjunto de registros(ls _ sys[4] +" \ "+ls_DSN,"DriveId",Regulong!,lu_driverid)
conjunto de registros(ls_sys[4]+" \"+ls_DSN,"SafeTransactions",Regulong!, lu_SafeTransactions)
4. Concurso abierto
Abierto (. w_ver_promp)
Si perfilstring("sea day plan.ini", "ini", "run_flag", " ")="0 "Entonces
//Obtener la ruta actual
Cadena ls _ruta actual
long ll_length=50
int li_rtn
Cadena ls_dsn="dsn_sdp "
Li _ RTN = getcurrentdirectorya(ll_length, refls_current_path)//Error al introducir el evento ue_ini.
Si li_rtn=0, entonces
Messagebox("Error de acceso", "Error de acceso al directorio de aplicaciones, reinstale")
Detener
Terminará si...
setProfileString(" sea day plan . ini ", " public ", " curr_path ", ls_current_path)
//Inicialización
this.triggerevent("ue_ini ")
//Inicializar el registro
este .trigger event(" UE _ auto _ set _ odbc ")
Terminará si...
//Obtener la fuente de datos predeterminada
ls _ DSN = cadena de perfil(" sea day plan . ini ", " ini ", " dsn_def ", "")
Si len(trim(ls_dsn))=0, entonces
Messagebox ("Error", "¡El sistema tiene un error en el archivo de inicialización de la fuente de datos!" )
Detener
Terminará si...
//Configurar fuente de datos
SQLCA. DBMS = "ODBC "
SQLCA. autocommit=false
SQLCA.
db parm = " connect string = ' DSN = "+ls _ DSN+"; UID = dbaPWD=sql ' "
Utilice sqlca para conectarse;
Si SQLCA. SQLCode & lt& gt Then 0
MessageBox("Error en la conexión de la base de datos", "No se puede conectar a la base de datos, posible motivo" + SQLCA. SQLErrText)
Regresar
Terminará si...
Cerrar (w_ver_promp)
Abrir (w_main)
Abrir (w_promp)
/ /Borrar la base de datos
Si es válido (w_promp), entonces
w _ promp . dw _ 1 objeto t _ 1 . "
Terminará si...
w_main.triggerevent("ue_new ")
setProfileString(" plan del día del mar . ini ", " ini " , " run_flag " , " 1 ")
Cerrar (con mensaje)
Abrir (w_test)
*********** ***** ****
//Ventana centrada automáticamente
Environment_Environment
int li_ReturnCode
Esto. SetRedraw(False) //¿Obtienes la resolución de pantalla?
Li _ return code = get Environment(le _ envir)//Mueve la ventana al centro de la pantalla.
si li _ ReturnCode & lt& gt1 entonces // falla
Esto. SetRedraw(true)
Return
Terminará si...
Li _ código de retorno = this move((PixelsToUnits(le _ envir. screen). ancho, ( SetRedraw(true)
Soy demasiado vago para componer. Míralo.