Página 1 de 1

Problema con _SQLite_Open

Publicado: 02 Abr 2014, 01:14
por avechuche
Bueno tengo un problema con esta funcion.

sDirectorioDB es una variable global, resulta que si le paso una ruta correcta o incorrecta, el @error siempre es 0 y no se porque! Alguna idea?

Código: Seleccionar todo

Func _insertSQL($sNombreColumnasBD, $sDatos, $NombreTabla = "Empleados")

	; Abro la BD
	Local $sSQL = _SQLite_Open($sDirectorioDB)

	If Not @error Then

		_SQLite_Exec($sSQL, "INSERT INTO " & $NombreTabla & "(" & $sNombreColumnasBD & ") VALUES (" & $sDatos & ");")

		; Cierro la BD
		_SQLite_Close($sSQL)

		Return True

	EndIf

	Return False

EndFunc   ;==>_insertSQL

Re: Problema con _SQLite_Open

Publicado: 02 Abr 2014, 15:39
por Dany
Verifica el valor de @error en consola o un msgbox

saludos

Re: Problema con _SQLite_Open

Publicado: 02 Abr 2014, 22:47
por avechuche
Siempre me devuelve 0, no se porque. Le pase o no un directorio válido, siempre 0

Re: Problema con _SQLite_Open

Publicado: 04 Abr 2014, 09:33
por juantxo
Se me ocurre que puedes comprobar el resultado de la funcion _SQLite_Open, ya que segun el codigo de SQLite.au3 si hay un error devuelve 0.

Asi en vez de

Código: Seleccionar todo

If Not @error Then
Prueba con

Código: Seleccionar todo

If $sSql Then 
Pero como bien dices, es muy extraño.¿has comprobado la libreria, por si no es correcta?

Este el es codigo de la que yo tengo (solo la funcion OPEN).

Código: Seleccionar todo

; #FUNCTION# ====================================================================================================================
; Author ........: piccaso (Fida Florian)
; Modified.......: jchd, jpm
; ===============================================================================================================================
Func _SQLite_Open($sDatabase_Filename = Default, $iAccessMode = Default, $iEncoding = Default)
	If Not $g_hDll_SQLite Then Return SetError(3, $SQLITE_MISUSE, 0)
	If $sDatabase_Filename = Default Or Not IsString($sDatabase_Filename) Then $sDatabase_Filename = ":memory:"
	Local $tFilename = __SQLite_StringToUtf8Struct($sDatabase_Filename)
	If @error Then Return SetError(2, @error, 0)
	If $iAccessMode = Default Then $iAccessMode = BitOR($SQLITE_OPEN_READWRITE, $SQLITE_OPEN_CREATE)
	Local $OldBase = FileExists($sDatabase_Filename) ; encoding cannot be changed if base already exists
	If $iEncoding = Default Then
		$iEncoding = $SQLITE_ENCODING_UTF8
	EndIf
	Local $avRval = DllCall($g_hDll_SQLite, "int:cdecl", "sqlite3_open_v2", "struct*", $tFilename, _ ; UTF-8 Database filename
			"ptr*", 0, _ ; OUT: SQLite db handle
			"int", $iAccessMode, _ ; database access mode
			"ptr", 0)
	If @error Then Return SetError(1, @error, 0) ; DllCall error
	If $avRval[0] <> $SQLITE_OK Then
		__SQLite_ReportError($avRval[2], "_SQLite_Open")
		_SQLite_Close($avRval[2])
		Return SetError(-1, $avRval[0], 0)
	EndIf

	$g_hDB_SQLite = $avRval[2]
	__SQLite_hAdd($__ghDBs_SQLite, $avRval[2])
	If Not $OldBase Then
		Local $encoding[3] = ["8", "16", "16be"]
		_SQLite_Exec($avRval[2], 'PRAGMA encoding="UTF-' & $encoding[$iEncoding] & '";')
	EndIf
	Return SetExtended($avRval[0], $avRval[2])
EndFunc   ;==>_SQLite_Open
A ver si descubres el fallo!! :smt026