Error Actualizando Campos En SQLite3


Subject: Error Actualizando Campos En SQLite3
Hola a todos.

Estoy desarrollando una aplicación que me sirva como inventario de equipos. He creado una BD con SQLite3 y estoy usando gambas 2.21 en Debian Testing.
Soy nuevo en gambas y me pareció interesante tratar de crear esta aplicación en este entorno, pero me sucede lo siguiente:

Tengo un botón para eliminar 32 registros de la BD, sin embargo, cuando lo intento obtengo el error siguiente: "Too many arguments in DBControl.class".
Si dejo solamente 31 registros, este error desaparece-> (Si elimino el último campo, por ejemplo: TextBox24.Text, "xscf=&32", TextBox25.text)
¿Existe alguna manera de solucionar esto?

PUBLIC SUB ButtonEliminar_Click()

DIM VarResult AS Result
IF Message.Question("¿Desea eliminar el registro actual?", "Si", "No") = 1 THEN
VarResult = Conexion.Edit("equipos", "Hostname=&1", TextBox1.Text, "Serie=&2", TextBox2.Text, "Hostid=&3", TextBox3.Text, "Marca=&4", TextBox4.Text, "Modelo=&5", TextBox5.Text, "Ubicacion=&6", TextBox6.Text, "Vlan=&7", TextBox7.Text, "Proyecto=&8", TextBox8.Text, "Sistema_Operativo=&9", TextBox9.Text, "IP1=&10", TextBox10.Text, "IP2=&11", TextBox11.Text, "IP3=&12", TextBox12.Text, "IP4=&13", TextBox13.Text, "IP5=&14", TextBox14.Text, "IP6=&15", TextBox15.Text, "Rack=&16", TextBox16.Text, "ram=&17", TextBox18.Text, "swap=&18", TextBox20.Text, "ncpus=&19", TextBox21.Text, "tcpus=&20", TextBox22.Text, "iou=&21", TextBox27.Text, "iox=&22", TextBox28.Text, "dominio=&23", TextBox33.Text, "hds=&24", TextBox31.Text, "hbas=&25", TextBox32.Text, "iob=&26", TextBox19.Text, "mcpus=&27", TextBox23.Text, "ilo=&28", TextBox30.Text, "pci=&29", TextBox29.Text, "mp=&30", TextBox26.Text, "consola=&31", TextBox24.Text, "xscf=&32", TextBox25.tex)
VarResult["Hostname"] = TextBox1.Text
VarResult["Serie"] = TextBox2.Text
VarResult["Hostid"] = TextBox3.Text
VarResult["Marca"] = TextBox4.Text
VarResult["Modelo"] = TextBox5.Text
VarResult["Ubicacion"] = TextBox6.Text
VarResult["Vlan"] = TextBox7.Text
VarResult["Proyecto"] = TextBox8.Text
VarResult["Sistema_Operativo"] = TextBox9.Text
VarResult["IP1"] = TextBox10.Text
VarResult["IP2"] = TextBox11.Text
VarResult["IP3"] = TextBox12.Text
VarResult["IP4"] = TextBox13.Text
VarResult["IP5"] = TextBox14.Text
VarResult["IP6"] = TextBox15.Text
VarResult["Rack"] = TextBox16.Text
VarResult["ram"] = TextBox18.Text
VarResult["iob"] = TextBox19.Text
VarResult["swap"] = TextBox20.Text
VarResult["ncpus"] = TextBox21.Text
VarResult["tcpus"] = TextBox22.Text
VarResult["mcpus"] = TextBox23.Text
VarResult["consola"] = TextBox24.Text
VarResult["xscf"] = TextBox25.Text
VarResult["mp"] = TextBox26.Text
VarResult["iou"] = TextBox27.Text
VarResult["iox"] = TextBox28.Text
VarResult["pci"] = TextBox29.Text
VarResult["ilo"] = TextBox30.Text
VarResult["hds"] = TextBox31.Text
VarResult["hbas"] = TextBox32.Text
VarResult["dominio"] = TextBox33.Text
VarResult.Delete
Resultado = Conexion.Exec("Select * from equipos")
IF ERROR THEN
Message.Error("No se pudo eliminar el registro.")
ELSE
Message.Info("El registro ha sido eliminado.")
MuestraCampos
END IF
END IF

END

Profile PM  
Subject: Re: Error Actualizando Campos En SQLite3
Hola

Primero que nada pedirte que pongas tu código entre quotes de código para hacerlo mas legible.

DIM VarResult AS Result
IF Message.Question("¿Desea eliminar el registro actual?", "Si", "No") = 1 THEN
VarResult = Conexion.Edit("equipos", "Hostname=&1", TextBox1.Text, "Serie=&2", TextBox2.Text, "Hostid=&3", TextBox3.Text, "Marca=&4", TextBox4.Text, "Modelo=&5", TextBox5.Text, "Ubicacion=&6", TextBox6.Text, "Vlan=&7", TextBox7.Text, "Proyecto=&8", TextBox8.Text, "Sistema_Operativo=&9", TextBox9.Text, "IP1=&10", TextBox10.Text, "IP2=&11", TextBox11.Text, "IP3=&12", TextBox12.Text, "IP4=&13", TextBox13.Text, "IP5=&14", TextBox14.Text, "IP6=&15", TextBox15.Text, "Rack=&16", ...


Lo has hecho muy complicado y no me extraña que salga por algo raro. Además para borrar no se pone edit sino delete.

La idea es
Dim Rs as result
if message.quiestion("¿desea eliminar el registro actual?","Si"."No"==1 then
Rs=conexion.delete("tabla","condicion", lista de parametros)
...


La forma de poner condicion es por ejemplo
"codigo=&1 and tipo=&2"
y los parámetros serían algo como esto
pidecodigo.text, pidetipo.text

Así que en tu caso sería algo como esto
Rs=conexion.delete("equipos","codigo=&1 and tipo=&2",pidecodigo.text,pidetipo.text)


Eso borraría en la tabla equipos aquellos cuyo código fuera igual a pidecodigo.text y cuyo tipo sea igual a pidetipo.text.

Eso mismo podrías escribirlo también de otra forma
rs=conexión.exec("delete from equipos where codigo=" & pidecodigo.text & " and tipo=" & pidetipo.text)


El primer sistema es genérico de gambas y tiene la virtud de que funciona igual con todas las bases de datos. Tanto que uses sqlite como mysql los borrará igual. El segundo método es ejecutar en el motor de la base de datos un comando que en este caso es borrar esos registros. Ese comando si puede ser distinto en una base de datos u otra.

Obviamente ese código y tipo me los he inventado para explicarte como funciona esto. Tu tienes que encontrar la manera de poder referirte a los códigos que quieres borrar.

Un saludo

Profile PM  
Subject: Re: Error Actualizando Campos En SQLite3
Vale, muchas gracias. Ya comprendí el concepto. Del mismo modo, quedó solucionada la parte de "Modificar", que me daba un error similar. Te agradezco mucho la explicación y, por supuesto, tu tiempo.

Salu2.

Profile PM  
Subject: Re: Error Actualizando Campos En SQLite3
"Los métodos como como .edit y .delete no pueden funcionar si no hay una clave primaria" (Benoît ipse dixit)

En SQLite todas las tablas tienen un campo identificador único que puedes referenciar con el nombre rowid.

Si creas un campo que sea primary key autonumérico y se llame, por ejemplo, ID, siempre será un sinónimo de rowid.
Utiliza rowid (o el ID mencionado arriba) para identificar las líneas que quieres manipular.

conexion.delete("equipos","rowid=&1",variable_con_rowid)

Suerte

Profile PM  

Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1265s (PHP: -21% SQL: 121%)
SQL queries: 23 - Debug Off - GZIP Enabled