https://foro.gambas-es.org/viewtopic.php?f=1&t=1659
-----------------------------------
skaterleopoldo12
Jueves, 09 Junio 2011, 16:32

¿Como Continuar Programando En La Siguiente Linea?(SOLUCIONADO)
-----------------------------------
Saludos a la Comunidad de Gambas-es...

Quieros Plantearles un Problema que me Ocurre y Quiero Presentarle la mayor fuente de Detalles para que puedan ayudarme con mas Facilidad, Primero dare los Detalles del Sistema Operativo y de mas.

Utilizo como sistema Operativo, Debian 5.0.1
Gambas 2.1

Soy Nuevo en Gambas Estoy Realizando un proyecto donde Guardo, Elimino, Consulto, Modifico, y otras cosas mas en Una base de datos Mysql.

La cuestion es que el proyecto me presenta el siguiente Error al Guardar.
[img]http://foro.gambas-es.org/files/images/1325/sin_nombre.jpg[/img]

Como ya he dicho antes soy Nuevo en Gambas vengo de Visual Basic. Y Pues conocimientos basicos yo creo que el Error se debe a que la Linea donde coloco los datos que deseo Guardar es muy larga, porque en verdad la tabla es extensa.

Por eso Trate de Cortar un poco el codigo de esa Linea identificando a cada TextBox con una letra o Numero. pero aun asi sigue siendo demasiado largo.
entonces quiero Saber Otro metodo que Pueda utilizar para guardar Datos que me permita continuar progrmando en la siguiente linea. O bueno no c si este mismo metodo me permite programar en la siguiente linea.

Estuve buscando en el foro pero la info no era muy Completa.

El metodo que uso para Guardar es el Siguiente.

[code linenumbers=false syntax=gambas]PRIVATE hResul AS Result
PRIVATE db AS Connection

PUBLIC SUB Form_Open()
ModConexion.conexion
END

PUBLIC SUB Button1_Click() '<-----------Boton de Guardar

DIM query AS String
DIM a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, a1, a2, a3, a4, a5, a6, a7, a8, a9, b1 AS String
a = TextBox24.Text
b = TextBox1.Text
c = TextBox2.Text
d = TextBox3.Text
e = TextBox4.Text
f = TextBox44.Text
g = TextBox45.Text
h = TextBox46.Text
i = TextBox11.Text
j = TextBox7.Text
k = TextBox17.Text
l = TextBox9.Text
m = TextBox13.Text
n = TextBox15.Text
o = TextBox18.Text
p = TextBox19.Text
q = Textbox20.Text
r = TextBox21.Text
s = TextBox28.Text
t = TextBox42.Text
u = TextBox47.Text
v = TextBox48.Text
w = TextBox49.Text
x = TextBox50.Text
y = TextBox25.Text
z = TextBox26.Text
a1 = TextBox27.Text
a2 = ComboBox1.Text
a3 = TextBox43.Text
a4 = TextBox29.Text
a5 = TextBox31.Text
a6 = TextBox32.Text
a7 = TextBox30.Text
a8 = TextBox33.Text
a9 = TextBox34.Text
b1 = TextBox35.Text

query = "INSERT INTO SIET.movimiento set TipoMovimiento='" & Trim(UCase(Textbox)) & "', o1='" & UCase(Trim(b)) & "', CedulaCODP='" & Trim(UCase(c)) & "', ApeyNombreDP='" & Trim(UCase(d)) & "', FechaIngresoDP='" & Trim(UCase(e)) & "', GeneroDP='" & Trim(UCase(f)) & "', EstadoCivilDP='" & Trim(UCase(g)) & "', NivelAcadeDP='" & Trim(UCase(h)) & "', DepenDA='" & Trim(UCase(i)) & "', CodigoDA='" & Trim(UCase(j)) & "', CargoDA='" & Trim(UCase(k)) & "', CargoHoraDA='" & Trim(UCase(l)) & "', SueldoDA='" & Trim(UCase(m)) & "', CodigoDepenDP='" & Trim(UCase(n)) & "', NombreDepenDP='" & Trim(UCase(o)) & "', CodigoCargoDP='" & Trim(UCase(p)) & "', DenominacionCarDP='" & Trim(UCase(q)) & "', UbicacionDepenDP='" & Trim(UCase(r)) & "', AsignaturaDP='" & Trim(UCase(s)) & "', HorasDP='" & Trim(UCase(t)) & "', TipoNombramientoDP='" & Trim(UCase(u)) & "', TurnoDiurnoDP='" & Trim(UCase(v)) & "', TurnoNocturnoDP='" & Trim(UCase(w)) & "', BolivarianoDP='" & Trim(UCase(x)) & "', NumeroCuentaDB='" & Trim(UCase(y)) & "', CodigoDB='" & Trim(UCase(z)) & "', BancoDB='" & Trim(UCase(a1)) & "', TipoCuentaDB='" & Trim(UCase(a2)) & "', DatoRetroactivoDB='" & Trim(UCase(a3)) & "', CedulaDB='" & Trim(UCase(a4)) & "', CodigoDepenDB='" & Trim(UCase(a5)) & "', CodigoCargoDB='" & Trim(UCase(a6)) & "', ApeyNombreDB='" & Trim(UCase(a7)) & "', DestinoSalienteDB='" & Trim(UCase(a8)) & "', ObservacionesDB='" & Trim(UCase(a9)) & "', ApeyNombreAnalisDB='" & Trim(UCase(b1)) & "'"
  
  ModConexion.consulta(query)
  IF ModConexion.conexion() THEN
    Message.Info("Los Datos Se Han Guardado Correctamente")
      TextBox1.SetFocus

ENDIF 
   ELSE
     Message.Error("Ocurrio un Error Mientras se Intentaban Guardar los Datos")


END
[/code]


Una Pregunta sencilla a lo antes Expuesto creo que seria:

¿Como Continuar Programando en la Siguiente Linea, que signo coloco o algo parecido que me permita seguir programando en la siguiente linea?
creo que eso es lo que deseo saber. "Si es que es ese mi Problema"

O si Existe Otro metodo para Guardar datos.

[color=#1900FF][b][size=14]Gracias de Antemano, Espero Pronta Respuestas... Gracias de verdad, y disculpa si el Planteamiento del tema no es Muy Bueno.. Acepto Concejos...[/size][/b][/color]


-----------------------------------
soplo
Jueves, 09 Junio 2011, 16:50

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Hola
Nunca se me había dado ese caso pero bueno ...

Para escribir una string en varias líneas lo que haces es escribir un renglon y empezar el siguiente con & de la siguiente manera

str=" ...... parte 1 ...."
   & " .... parte 2 ...."
   & " .... parte 3 ...."

De esa manera puedes confeccionar un string muy largo.

Otra cosa que se me ocurre es que puedes meterlo todo en un string y luego hacer el insert del string. Por ejemplo si haces lo anterior con una variable str entonces
ModConexión.consulta("INSERT INTO SIET.movimiento set " & str)

Tampoco veo la necesidad de tanta variable a .. b1 cuando puedes usar los textboxes directamente. De hecho si los utilizases como una colección podrías hacer un bucle recorriendo esa colección y todo ese largo código no tendría mas de cinco o seis lineas pero bueno ...

 :mryellow:


-----------------------------------
skaterleopoldo12
Jueves, 09 Junio 2011, 17:01

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Ok si Voy a Probar a ver, lo de los textbox lo hice fue con esa Intencion, de Recortar por lo del error que me tira, gracias por responder tan rapido, voy a probar y Comento si Funciona!!! :D


-----------------------------------
Ronny
Jueves, 09 Junio 2011, 19:32

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Amigo Skater...

hay miles de formas de hacerlo... pero  quisiera ser lo mas original posible  y hacertelo mas facil...

has algo: 
1.- inserta un listbox1 en el formulario y llamalo query
2.- en las propiedades añade un list.... aparecera gráficamente la caja en donde escribiras... alli escribe corrido tu query
3.-  si en el formulario utilizas mas querys, añadelos como list o items de el listbox.. asi no te metes con el texto del codigo fuente.
4.- ya programando solo dices  que el   la cadena sql se llama query.list[0] para la primera y cambias el índice para referenciar las cadenas que quieras...    ModConexion.consulta(query.list[0])

Es solo una idea. Aclaro que no digo si es mejor peor, o nada.. lo que si es verdad es que liberas el fuente de tanto escrito....

PD. Coloca el listbox oculto y en un area no  visibel es solo un contenedor de query


-----------------------------------
skaterleopoldo12
Jueves, 09 Junio 2011, 20:18

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Gracias por las respuestas tan rapidas, pero soy nuevo en esto no entiendo mucho lo que dicen, intente guiarme por lo q dice el Compañero Soplo, pero no entendi. he Hice esto pero quedo asi con comentarios.


[code linenumbers=false syntax=gambas]DIM query AS String

'////////////////////////ESTO EN UNA LINEA//////////////////////
Str = " query = " INSERT INTO SIET.movimiento set TipoMovimiento = '" & Trim(UCase(TextBox24.Text)) & "', CedulaDP='" & UCase(Trim(TextBox1.Text)) & "', CedulaCODP='" & Trim(UCase(TextBox2.Text)) & "', ApeyNombreDP='" & Trim(UCase(TextBox3.Text)) & "', FechaIngresoDP='" & Trim(UCase(TextBox4.Text)) & "', GeneroDP='" & Trim(UCase(TextBox44.Text)) & "', EstadoCivilDP='" & Trim(UCase(TextBox45.Text)) & "', NivelAcadeDP='" & Trim(UCase(TextBox46.Text)) & "', CodigoDepenDA='" & Trim(UCase(TextBox11.Text)) & "', DepenDA='" & Trim(UCase(TextBox7.Text)) & "', CodigoDA='" & Trim(UCase( & "', DepenDA='" & Trim(UCase(TextBox17.Text)))) & "', CargoDA='" & Trim(UCase(TextBox9.Text)) & "', CargoHoraDA='" & Trim(UCase(TextBox13.text)) & "', SueldoDA='" & Trim(UCase(TextBox15.Text)) & "', CodigoDepenDP='" & Trim(UCase(TextBox18.Text))" 
 
'////////////////ESTO EN LA OTRA LINEA///////////////////////  
 & "', NombreDepenDP='" & Trim(UCase(TextBox19.Text)) & "', CodigoCargoDP='" & Trim(UCase(TextBox20.Text)) & "', DenominacionCarDP='" & Trim(UCase(TextBox21.Text)) & "', UbicacionDepenDP='" & Trim(UCase(TextBox28.Text)) & "', AsignaturaDP='" & Trim(UCase(TextBox42.Text)) & "', HorasDocenteDP='" & Trim(UCase(TextBox22.Text)) & "', HorasAdminisDP='" & Trim(UCase(TextBox23.Text)) & "', HorasTotalDP='" & Trim(UCase(Label37.Caption)) & "', TipoNombramientoDP='" & Trim(UCase(TextBox47.Text)) & "', TurnoDiurnoDP='" & Trim(UCase(TextBox48.Text)) & "', TurnoNocturnoDP='" & Trim(UCase(TextBox49.Text)) & "', BolivarianoDP='" & Trim(UCase(TextBox50.Text)) & "', NumeroCuentaDB='" & Trim(UCase(TextBox25.Text)) & "', CodigoDB='" & Trim(UCase(TextBox26.Text)) & "', BancoDB='" & Trim(UCase(TextBox27.Text)) & "', TipoCuentaDB='" & Trim(UCase(ComboBox1.Text))
 
'//////////////////y ESTO EN LA OTRA LINE/////////////////

  & "', DatoRetroactivoDB='" & Trim(UCase(TextBox43.Text)) & "', CedulaDB='" & Trim(UCase(TextBox29.Text)) & "', CodigoDepenDB='" & Trim(UCase(TextBox31.Text)) & "', CodigoCargoDB='" & Trim(UCase(TextBox32.Text)) & "', ApeyNombreDB='" & Trim(UCase(TextBox30.Text)) & "', DestinoSalienteDB='" & Trim(UCase(TextBox33.Text)) & "', ObservacionesDB='" & Trim(UCase(TextBox34.Text)) & "', ApeyNombreAnalisDB='" & Trim(UCase(TextBox35.Text)) & "'"[/code]


[color=#0000FF][size=14]Disculpen pero en verdad no entiendo muy bien.[/size][/color]


-----------------------------------
shordi
Jueves, 09 Junio 2011, 20:25

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Una cosa no entiendo: ¿Por qué usar una sentencia sql si lo puedes hacer con gambas y mucho más sencillo?
Prueba algo así:
[code linenumbers=false syntax=gambas]
dim rs as result

rs=miconexion.create("mitabla")
rs!campo1=textbox1.text
rs!campo2=textbox2.text
rs!campo3=textbox3.text
etc...

rs.update

[/code]
Mucho más simple, mucho más limpio y muchísimo más fácil de escribir...

Suerte


-----------------------------------
skaterleopoldo12
Jueves, 09 Junio 2011, 20:50

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
[color=#FF0026]Amigos no Entiendo lo que pasa es que el unico metodo que conosco y que me A Funcionado para Guardar Datos a una Base de datos en Mysql es el Siguiente
[/color]
Inclusive asi Parecido es que Estoy Realizando el Proyecto en mi Trabajo a Diferencia de que el que estoy haciendo es mas largo la Linea del Boton Guardar

[code linenumbers=false syntax=gambas]PUBLIC db AS NEW Connection

PUBLIC FUNCTION conexion() AS Boolean
 db.close()
 db.type = "mysql"
 db.host = "10.5.225.24"
 db.login = "laraujo"
 db.password = "*********"
 db.open()
 RETURN TRUE
 CATCH
 message.error(Error.text)
 RETURN FALSE
 END
 
PUBLIC SUB consulta(qry AS String)
 
 rs1 = db.Exec(qry)
 
END

PUBLIC SUB Button2_Click()  '<<<---------Boton Guardar
DIM query AS String

  query = "INSERT INTO SIET.datos set Titulo='" & Trim(UCase(TextBox1.Text)) & "', Autor='" & UCase(Trim(TextBox2.Text)) & "', Fecha='" & Trim(UCase(TextBox3.Text)) & "', Precio='" & Trim(UCase(TextBox4.Text)) & "', Descripcion='" & Trim(UCase(TextBox5.Text)) & "', Genero='" & Trim(UCase(TextBox6.Text)) & "'"

ModConexion.consulta(query)

  IF ModConexion.conexion() THEN

    Message.Info("Datos Guardados")

    TextBox1.Clear()
    TextBox2.Clear()
    TextBox3.Clear()
    TextBox4.Clear()
    TextBox5.Clear()
    TextBox6.Clear()
    TextBox1.SetFocus
   
 ELSE

      message.Error("Error al Guardar ")

ENDIF 
END[/code]

Si Alguien me Explica un Mejor metodo Para Guardar Datos en Mysql que evite este error que me Causa le Agradeceria. lo q pasa es que en el Foro en algunos temas que he encontrado las Respuestas no son muy Completas o por lo menos para mi conocimiento...


-----------------------------------
shordi
Jueves, 09 Junio 2011, 21:21

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Te lo acabo de explicar en mi respuesta anterior.
Declaras un Result, creas con él un registro con el método Create , actualizas los campos y lo grabas con el método update.
Tal vez deberías leerte el libro de Gambas. Lo tienes en la sección de descargas de este mismo portal.

Suerte.


-----------------------------------
skaterleopoldo12
Viernes, 10 Junio 2011, 14:30

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
shordi por leerme el Libro Fue que Logre Programar el Boton Guardar... 
asi es como sale en el libro q lodebo hacer... y asi me funciono, hasta que se me presento el problema de guardar muchos datos!!!
De todas formas Gracias por Comentar....




[b][size=14][color=#FF0019][Aun no he Solucionado][/color][/size][/b]


-----------------------------------
marlon7106
Viernes, 10 Junio 2011, 16:19

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Socio Buen dia, yo también me guié por un libro e hice movimientos desde gambas con bases mysql con ejemplos básicos, agendas, nominas, estudiantes, etc,,, no te puedo dar un consejo muy técnico de tu problema pero si te funciona a pequeña escala no es difícil hacerlo a gran escala 

paso 1 prueba a pequeña escala guarda pocos datos y después de que esto funcione puedes incrementar el numero de datos si por este motivo falla puede ser que se presenten conflictos al manejar movimientos grandes entre gambas y mysql (supuesto 1) o se me ocurre que tengas problemas con los tipos de datos que guardas (2 supuesto)

paso 2 si ya sabes como guardar pocos datos y funciona entonces secciona tus datos en paquetes y guárdalos poco a poco eso sacrifica un poco de tiempo en ejecución pero debe de ser imperceptible para el usuario.

Por ejemplo para guardar un campo nombre + campo apellido esto se hace en una sola linea de instrucción pero igual se podría seccionar primero guardar el campo nombre, y luego guardar el campo apellido.....(supuesto) ,,,(supuesto)...
ya sabes no soy experto pero si recursivo no es una programación elegante pero te dará resultados

Marlon Perez 
sin comentarios


-----------------------------------
shordi
Sabado, 11 Junio 2011, 11:28

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Prueba esto. Es lo mismo que te puse arriba, pero con tus nombres de campos, a ver si así lo entiendes.
Como ves, mucho más claro y sencillo que la cadena sql.

[code linenumbers=false syntax=gambas]PRIVATE db AS NEW Connection

PUBLIC FUNCTION conexion() AS Boolean
 db.close()
 db.type = "mysql"
 db.host = "10.5.225.24"
 db.login = "laraujo"
 db.password = "*********"
 db.open()
 RETURN TRUE
 CATCH
 message.error(Error.text)
 RETURN FALSE
 END
 
PUBLIC SUB Button2_Click()  '<<<---------Boton Guardar

dim rs as result
dim contrl as object

rs=db.create("SIET.datos")

rs!Titulo= Trim(UCase(TextBox1.Text))  
rs!Autor= UCase(Trim(TextBox2.Text))
rs!Fecha=Trim(UCase(TextBox3.Text)) 
rs!Precio=Trim(UCase(TextBox4.Text)) 
rs!Descripcion=Trim(UCase(TextBox5.Text))
rs!Genero=Trim(UCase(TextBox6.Text)) 

rs.update

for each contrl in me.controls
   if contrl is textbox then
        contrl.Clear()
   endif
next

    TextBox1.SetFocus
  
END[/code]


-----------------------------------
soplo
Sabado, 11 Junio 2011, 14:22

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
Lo que es a mi esta forma me parece mucho mas adecuada, incluso para debuggear que estás metiendo pero bueno ... para gustos los colores.


-----------------------------------
skaterleopoldo12
Jueves, 21 Julio 2011, 19:55

Re: ¿Como Continuar Programando En La Siguiente Linea?
-----------------------------------
[quote user="shordi" post="9720"]Prueba esto. Es lo mismo que te puse arriba, pero con tus nombres de campos, a ver si así lo entiendes.
Como ves, mucho más claro y sencillo que la cadena sql.

[code linenumbers=false syntax=gambas]PRIVATE db AS NEW Connection

PUBLIC FUNCTION conexion() AS Boolean
 db.close()
 db.type = "mysql"
 db.host = "10.5.225.24"
 db.login = "laraujo"
 db.password = "*********"
 db.open()
 RETURN TRUE
 CATCH
 message.error(Error.text)
 RETURN FALSE
 END
 
PUBLIC SUB Button2_Click()  '<<<---------Boton Guardar

dim rs as result
dim contrl as object

rs=db.create("SIET.datos")

rs!Titulo= Trim(UCase(TextBox1.Text))  
rs!Autor= UCase(Trim(TextBox2.Text))
rs!Fecha=Trim(UCase(TextBox3.Text)) 
rs!Precio=Trim(UCase(TextBox4.Text)) 
rs!Descripcion=Trim(UCase(TextBox5.Text))
rs!Genero=Trim(UCase(TextBox6.Text)) 

rs.update

for each contrl in me.controls
   if contrl is textbox then
        contrl.Clear()
   endif
next

    TextBox1.SetFocus
  
END[/code][/quote]

MUCHISIMAS GRACIASSS ESTE ME FUNCIONO DE MARAVILLA
GRACIAS POR LA PACIENCIA DE VERDAD ESTUVE VARIOS DIAS ALLANDO LA FORMA PERO ERA POR QUE SOLO SABIA ESE METODO PARA GUARDAR, HASTA QUE ME TOPE CON ESTE SISTEMA QUE NECESITABA GUARDAR VARIOS DATOS
 :mrblue:  :mrblue:  :mrblue:  :mrblue:  :mrblue:  :mrblue:  :mrblue:  :mrblue: 
GRACIAS POR LA PACIENCIA.


