Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2019
Camilo Camilo is offline
Miembro
 
Registrado: jun 2007
Posts: 147
Poder: 17
Camilo Va por buen camino
Grabar datos desde ListView a Tabla Firebird.

Hola amigos un saludo especial.
En el siguiente procedimiento tengo tres dudas que por mas vueltas y consultas que he hecho definitivamente no pude.
1) marcado con verde, la pregunta es: como declaro en esa variable un valor que esta en el listview.Columns[0]. es decir necesito que la variable "repetir" corresponda a cualquier numero que esta previamente reflejado en esa columna.
2) marcado con purpura, la situación es casi la misma de la pregunta No. 1; Necesito que "si el registro esta chequeado" entonces haga la acción de grabar.
3) marcado con turquesa, vuelve y juega; el parámetro para la grabación no me da con ninguna opción estudiada (y juro que lo he hecho).

En síntesis este procedimiento busca: Grabar en una tabla llamada "registros" tres campos llamados "PROCEDIMIENTO, CODIGO_PROCEDIMIENTO, VALOR" los registros que esten chequeados de una lista contenida en unas columnas de un ListView, el numero de veces que dice una columna adicional del mismo listview.

Mil gracias por los aportes y atención.

Código Delphi [-]
procedure TForm1.GrabarClick(Sender: TObject);
var
i, j, repetir: integer;
begin
 for i := 0 to ListView.Items.Count - 1 do
  begin
    Repetir := StrToInt(ListView.Items.Item[0].SubItems[0]);
     if (ListView.Selected = nil) then
          with IBQGrabar do
            begin
               SQL.Text := 'INSERT INTO TREGISTROS'
               + '(PROCEDIMIENTO, CODIGO_PROCEDIMIENTO, VALOR)'
               + 'VALUES(:PROCEDIMIENTO, :CODIGO_PROCEDIMIENTO, :VALOR)';
               IBQGrabar .ParamByName('PROCEDIMIENTO').AsString:= ListView.Items.Item[0].SubItems[1];
               IBQGrabar .ParamByName('CODIGO_PROCEDIMIENTO').AsInteger:= ListView.Items.Item[0].SubItems[2];
               IBQGrabar .ParamByName('VALOR').AsFloat:= StrToFloatDef(ListView.Items.Item[0].SubItems[3], 0);
               For j := 1 to Repetir do
               ExecSQL;
            end;
  end;
           IBT1.CommitRetaining;
           ShowMessage('MUESTRA(S) GRABADA(S) CON EXITO');
end;

BD: Firebird

Última edición por Camilo fecha: 21-06-2019 a las 06:38:10.
Responder Con Cita
  #2  
Antiguo 21-06-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Hola Camilo

Sin entender muy bien el problema que planteas, si veo en tu código, que recorres cada uno de los registros del listView con la variable "i" pero luego no utilizas dicha variable para apuntar al registro y enlazas siempre al registro 0 o primer registro del listview.

Creo que ese es el problema que te esta generando, para solventarlo sustituye Item[0] en todo el código por Item[i], y con eso seguramente lo puedas solucionar

saludos
Responder Con Cita
  #3  
Antiguo 21-06-2019
Camilo Camilo is offline
Miembro
 
Registrado: jun 2007
Posts: 147
Poder: 17
Camilo Va por buen camino
Bucanero mil gracias por tu respuesta ademas de oportuna muy acertada.
Con eso resolví el punto tres marcado con turquesa. Tu aporte si soluciono ese punto. Pero quedo sin poder hacer los otros dos (1, 2).
Resumiendo mi tema: en los puntos 1 y 2 siguen vivas las dudas y el punto 3 quedo superado gracias al aporte de Bucanero.
Mil gracias.
Responder Con Cita
  #4  
Antiguo 21-06-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
por lo que creo que intentas hacer es saber que registros están seleccionados en el listView, para lo cual intenta sustituyendo tu linea del punto 2

Código Delphi [-]
   if (ListView.Selected = nil) then

por esta otra

Código Delphi [-]
if ( ListView.Items[i].Selected ) then

En cuanto a lo de convertir una cadena en numero lo que tienes funciona siempre que la cadena sea realmente un numero, en caso contrario te dará un error, para evitar el error, inténtalo así:

Código Delphi [-]
   if not TryStrToInt(ListView.Items.Item[0].SubItems[0], Repetir) then
     MessageDlg('El valor no es correcto', mtError, [mbOK], 0)
   else if ( ListView.Items[i].Selected ) then begin
        with IBQGrabar do
            begin
               SQL.Text := 'INSERT INTO TREGISTROS'
               + '(PROCEDIMIENTO, CODIGO_PROCEDIMIENTO, VALOR)'
               + 'VALUES(:PROCEDIMIENTO, :CODIGO_PROCEDIMIENTO, :VALOR)';
               IBQGrabar .ParamByName('PROCEDIMIENTO').AsString:= ListView.Items.Item[0].SubItems[1];
               IBQGrabar .ParamByName('CODIGO_PROCEDIMIENTO').AsInteger:= ListView.Items.Item[0].SubItems[2];
               IBQGrabar .ParamByName('VALOR').AsFloat:= StrToFloatDef(ListView.Items.Item[0].SubItems[3], 0);
               For j := 1 to Repetir do
               ExecSQL;
            end;
   end;
Responder Con Cita
  #5  
Antiguo 21-06-2019
Camilo Camilo is offline
Miembro
 
Registrado: jun 2007
Posts: 147
Poder: 17
Camilo Va por buen camino
Gracias nuevamente.
te cuento que en una primera prueba no funciono. Pero me imagino que tengo que sobre esa base hacer algunos ajustes. Claro que el codigo propuesto esta bien me corresponde es mirar y acomodar bien los subitems y demás aspectos prácticos a ver si lo puedo cuadrar.

Mil gracias y de resolverlo claro que pondré como nos quedo para alguien que siga el hilo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Grabar y leer datos desde un fichero Jere_84 Varios 13 08-04-2015 15:26:49
cargar datos a listview desde bd sqlite jonydread Conexión con bases de datos 2 06-04-2013 17:04:24
actualizar datos desde otra tabla firebird 2.1 shaymon325 Firebird e Interbase 5 08-05-2012 05:43:12
Pasar Datos de un Listview a un tabla frholguin Conexión con bases de datos 6 11-11-2011 02:03:29
grabar datos desde edit a la tabla fernando1973 SQL 7 04-05-2007 21:13:22


La franja horaria es GMT +2. Ahora son las 22:54:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi