---
title: roSqliteStatement
slug: develop/es/rosqlitestatement
docTags: 
createdAt: 2025-03-11T07:07:17.201Z
---

Este objeto se crea llamando al método `CreateStatement()` en un objeto *roSqliteDatabase*. El equivalente en JavaScript es usar IndexedDB.

## ifSqliteStatement

Todos los métodos *vincular* devuelven True en caso de éxito.

### BindByName(associative\_array As Object) As Boolean

Vincula las variables SQL usando los nombres contenidos en la sentencia SQL.

### BindByOffset(associative\_array/enumerable As Object) As Boolean

Vincula las variables SQL usando el índice contenido en la sentencia SQL. Si se pasa un arreglo asociativo, este método convertirá las claves del arreglo asociativo en desplazamientos numéricos al vincular. Si se pasa un objeto enumerable (por ejemplo, *roArray*), vinculará los valores del enumerable en el orden en que están almacenados.

### BindText(variable/index As Object, value As String) As Boolean

Vincula la variable SQL indicada por el parámetro name o index al valor de cadena pasado.

### BindInteger(variable/index As Object, value As Integer) As Boolean

Vincula la variable SQL indicada por el parámetro name o index al valor entero pasado.

### Run() As Integer

Ejecuta la sentencia SQL inmediatamente y espera el resultado entero. Los siguientes son posibles códigos enteros de resultado:

- 100: Sentencia completada
- 101: Ocupado
- 102: Filas disponibles

### RunBackground() As Integer

Ejecuta la sentencia SQL en segundo plano. Puede usar *roSqliteDatabase.SetPort()* para establecer un puerto de mensajes que recibirá un mensaje *roSqliteEvent* más adelante. La llamada a RunBackground() dará como resultado un ID entero de transacción, que aparecerá en el mensaje *roSqliteEvent* que coincida con la transacción.

### GetData() As Object

Devuelve un arreglo asociativo de pares nombre/valor que están disponibles después de una operación SELECT (o similar).

### Finalise()

Finaliza la sentencia. Este método debe aplicarse a las sentencias antes de que se cierre la base de datos principal. El objeto no debe usarse después de llamar a este método. También tenga en cuenta que los objetos se finalizan automáticamente cuando se eliminan.

## Ejemplos

El siguiente script inserta en una tabla usando el método `BindByName()`:

```text
insertStmt = db.CreateStatement("INSERT INTO playback (md5,path,playback_count) VALUES(:md5_param,:path_param,:pc_param);")

print insertStmt

if type(insertStmt) <> "roSqliteStatement" then
    print "We didn't get a statement returned!!"
    end
endif

params = { md5_param: "ABDEF12346",  path_param: "/foo/bar/bing/bong", pc_param: 11 }

bindResult = insertStmt.BindByName(params)

if bindResult
    print "BindByName OK"
else
    print "BindByName FAILED"
    end
endif

sqlResult = insertStmt.Run()

print sqlResult

if sqlResult = SQLITE_COMPLETE
    print "Table Insertion OK"
else
    print "Table Insertion FAILED"
endif

insertStmt.Finalise()
```

El siguiente script inserta en una tabla en segundo plano:

```text
' This examples assume you have set a message port on your roSqliteDatabase instance
'

insertStmt = db.CreateStatement("INSERT INTO playback (md5,path,playback_count) VALUES(:md5_param,:path_param,:pc_param);")

print insertStmt

if type(insertStmt) <> "roSqliteStatement" then
    print "We didn't get a statement returned!!"
    end
endif

params = { md5_param: "ABDEF12348",  path_param: "/foo/bar/bing/bong", pc_param: 13 }

bindResult = insertStmt.BindByName(params)

if bindResult
    print "BindByName OK"
else
    print "BindByName FAILED"
    end
endif

expectedId = insertStmt.RunBackground()

e = mp.WaitMessage(10000)
if e <> invalid then
    if type(e) = "roSqliteEvent" then
        transId = e.GetTransactionId()
        sqlResult = e.GetSqlResult()
        print transId
        print sqlResult
        if transId <> expectedId then
            print "Incorrect transaction Id"
            end
        endif
        if sqlResult <> SQLITE_COMPLETE then
            print "SQL Insertion Failed"
            end
        endif
    else
        print "RunBackground() - Wrong event - FAILED"
        end
    endif
else
    print "RunBackground() - No Response - FAILED"
    end
endif

' You don't need to call Finalise() since that'll be done by the background processor.
```

El siguiente script consulta desde una tabla:

```text
selectStmt = db.CreateStatement("SELECT * FROM playback;")

if type(selectStmt) <> "roSqliteStatement" then
    print "We didn't get a statement returned!!"
    end
endif

sqlResult = selectStmt.Run()

print sqlResult

while sqlResult = SQLITE_ROWS
    resultsData = selectStmt.GetData()
    print resultsData;
    sqlResult = selectStmt.Run()
end while

selectStmt.Finalise()
```
