Ayuda en Sqlite
Posted: Wed Dec 02, 2009 3:22 pm
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 )
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 )