Page 1 of 1

Ayuda en Sqlite

Posted: Wed Dec 02, 2009 3:22 pm
by claudiotedesco
Estoy aprendiendo a usar SQlite y comence con una demo segun los ejemplos
pero me da el siguiente error
Error BASE/1132 Bound error: array access


Called from CARGARGRID(88)
Called from (b)MAIN(50)
Called from _DOCONTROLEVENTPROCEDURE(4749)
Called from EVENTS(1364)
Called from _DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(4391)
Called from DOMETHOD(7260)
Called from MAIN(55)


Les adjunto el archivo que estoy armando a ver si me pueden ayudar cual seria la solucion a este error
Gracias
Claudio


* SQLITE Sample by Rathinagiri / MOL / Sudip / Grigory Filatov (HMG Forum)

#include "minigui.ch"

FUNCTION main
local aTable := {}
local aCurRow := {}
public dbo := nil
public dbo1 := nil
public cDBName := "ALUMNOS.DB3"
public aFields := {}

set century on
set date ital

dbo1 := sqlite3_open(cDBName, .T.)
IF Empty( dbo1 )
msginfo("Database could not be connected!")
RETURN .f.
ENDIF

define window sample at 0,0 width 800 height 700 main

define grid table
row 10
col 10
width 780
height 500
widths {200,100}
items aFields
headers {"Nombre","Codigo"}
end grid

define button P_ViewRecord
row 600
col 100
width 140
height 24
caption "Crear tabla"
action creartabla()
end button

define button P_CARGARGRID
row 600
col 300
width 140
height 24
caption "Mostrar datos"
action Cargargrid()
end button

end window
sample.center
sample.activate
return NIL

*--------------------
FUNCTION creartabla
local cError
cCreateSQL := "CREATE TABLE FICHA (NOMBRE_ALU VARCHAR(50), CODIGO_ALU NUMERIC(3));"
cCreateSQL += "INSERT INTO FICHA VALUES ('JOSE PEREZ', 22);"
cCreateSQL += "INSERT INTO FICHA VALUES ('ROBERTO SANCHEZ', 50);"
cCreateSQL += "INSERT INTO FICHA VALUES ('MARIA LOPEZ', 32);"
cCreateSQL += "INSERT INTO FICHA VALUES ('CARMELA ROTEN', 72);"
cCreateSQL += "INSERT INTO FICHA VALUES ('MARCELO JUTON', 40);"
cCreateSQL += "INSERT INTO FICHA VALUES ('LUIS SANTOS', 42);"
dbo := sqlite3_exec(dbo1, cCreateSQL)
if dbo == 0
msginfo("BASE CREADA Y CARGADA CON 6 REGISTROS")
return .t.
endif
cError := sqlite3_errmsg(dbo1)
if !empty(cError)
msgbox(cError)
endif
RETURN .f.

*--------------------
FUNCTION CARGARGRID
*--------------------
local aCurRow := {}
LOCAL cTable := "FICHA"
LOCAL cStatement1 := "SELECT * FROM " + cTable
aFields := SQLITE_QUERY( dbo1, cStatement1 )
for i := 1 to len(aFields)
aCurRow := aFields
sample.table.additem({aCurRow[1], aCurRow[2]})
next i
sample.table.Refresh
RETURN .t.



*--------------------------------------
FUNCTION SQLITE_QUERY( db, cStatement )
*---------------------------------------------------------------------------
LOCAL stmt, nCCount, nI, nCType
LOCAL aRet := {}, aRec := {}

stmt := sqlite3_prepare( db, cStatement )

IF !EMPTY(stmt)
DO WHILE sqlite3_step( stmt ) == 100
aRec := {}
nCCount := sqlite3_column_count( stmt )

IF nCCount > 0
FOR nI := 1 TO nCCount
nCType := sqlite3_column_type( stmt, nI )

SWITCH nCType
CASE "NULL"
AADD( aRec, "NULL")
EXIT

CASE "FLOAT"
AADD(aRec, sqlite3_column_double(stmt, nI))
exit
CASE "INTEGER"
// AADD( aRec, LTRIM(STR( sqlite3_column_int( stmt, nI ) )) )
AADD(aRec, sqlite3_column_int(stmt, nI))
EXIT

CASE "TEXT"
AADD( aRec, sqlite3_column_text( stmt, nI ) )
EXIT
END SWITCH
NEXT nI
ENDIF
aadd(aRet, aRec)
ENDDO
sqlite3_finalize( stmt )
ENDIF

RETURN( aRet )

Re: Ayuda en Sqlite

Posted: Thu Dec 03, 2009 4:31 am
by sudip
Hello Claudiotedesco,

Your sent code has some runtime problems. It doesn't show the records in the table. Have you changed the given sample in \HMG\Samples\Sqlite folder?

Given sample is running fine in my computer.

With best regards.

Sudip

Re: Ayuda en Sqlite

Posted: Thu Dec 03, 2009 12:54 pm
by claudiotedesco
Muchas gracias
voy a probar como el ejemplo que me indicas
Saludos

Claudio