Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2013
nefore nefore is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 25
Poder: 0
nefore Va por buen camino
Traer un valor de un campo de la Tabla (Access) incluso si esta vacia

Hola

(Iba a colocar esta pregunta en el primer tema que hice, pero lo considero como un tema aparte, asi que...)

¿Como haria para traer un valor de un campo de la BD y que pasaria si este campo estaria vacio?
Por ejemplo: Tengo una Base de Datos la cual contiene varias tablas: Propietarios, Veterinarios, Inspectores, y una llamada Parametros
Tanto los propietarios, como los veterinarios y los inspectores, tienen su respectivo codigo (Codigo_propietario, etc.)
Ahora bien, cuando realizo un alta el codigo a generar para el nuevo propietario, estara almacenado en la tabla Parametros (la cual contiene campos tales como ULTIMO_PROPIETARIO, ULTIMO_VETERINARIO, etc. Y un solo registro en el cual esta almacenado en cada uno de sus campos, el ultimo codigo del tipo de persona a la cual haya cargado en el sistema)
Lo que debo hacer (para hacer un alta de propietario) es traer el valor del campo ULTIMO PROPIETARIO, incrementarlo en 1 (y ese sera el codigo de la persona), cuando grabo los datos en la tabla propietarios, tambien grabo el codigo en la Tabla Parametros.
A todo esto:
Como se escribe una sentencia que permita traerme un dato de una tabla y pasarlo a una variable a partir de un ADOTable?
Responder Con Cita
  #2  
Antiguo 16-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola nefore.

Por lo que entiendo tenes una tabla de un solo registro donde se almacenan los últimos identificadores que corresponden a cada tabla, algo como:
Código SQL [-]
CREATE TABLE PARAMETROS(
  ULTIMO_PROPIETARIO INTEGER,
  ULTIMO_VETERINARIO INTEGER,
  etc,
  ...
);

Cita:
Como se escribe una sentencia que permita traerme un dato de una tabla y pasarlo a una variable a partir de un ADOTable?
Te pongo un ejemplo de ingreso, para él mismo, agrega otro TADOTable vinculado a la tabla PARAMETROS.

Suponiendo que el ADOTable vinculado a veterinarios se llama tbVeterinario, el vinculado a parámetros se llama tbParametros y sus campos fueron iniciados a cero, las acciónes básicas a seguir serían:
Código Delphi [-]
...
var
  Ultimo : Integer;
begin
  // Obtener el último ID de veterinario de la tabla "Parametros"
  // incrementarlo en uno y almacenarlo en la variable Ultimo
  Ultimo :=  tbParametros.FieldByName('ULTIMO_VETERINARIO').Value + 1;

  // Agregar un registro en tabla "Veterinarios"
  tbVeterinarios.Insert;
  // Asignarle el ID (Codigo) de veterinario
  tbVeterinarios.FieldByName('Codigo_Veterinario').Value := Ultimo;
  { Asignar los demás valores del veterinario
  ...
  ...
  }
  tbVeterinarios.Post;  // Guardar

  // Actualizar ultimo veterinario en tabla "Parametros"
  tbParametros.Edit;
  tbParametros.FieldByName('ULTIMO_VETERINARIO').Value := Ultimo;
  tbParametros.Post; // Guardar
  ...
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 16-06-2013
nefore nefore is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 25
Poder: 0
nefore Va por buen camino
Smile

Vaya, es lo que estaba buscando (en VB 6.0 tenia el Adotable.Columns) y no sabia como hacer algo parecido aca en Delphi. Lo probrare. Muchas gracias por tus respuestas me han ayudado mucho

Última edición por Casimiro Notevi fecha: 16-06-2013 a las 10:26:13.
Responder Con Cita
  #4  
Antiguo 16-06-2013
nefore nefore is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 25
Poder: 0
nefore Va por buen camino
Hola he intentando el codigo que me has puesto, y funciona de maravilla (lo he intentado con el campo (ULTMO_PROPIETARIO) el problema es que al guardar ese valor en el campo parametro, me salta un error pidiendome que le agregue un valor a los demas campos (ULTIMO_INSPECTOR, ULTIMO_VETERINARIO, etc.), me he fijado en la BD de Access y existe una propiedad que dice 'Requerido' (Hacer obligatoria la entrada de este campo') le he puesto que no, pero aun asi, me pide que le ingrese valor a los demas campos.

Código Delphi [-]
procedure TForm5.FormCreate(Sender: TObject);
begin
parametro.conectaBD;
parametro.conectatabla;
if (ADOTable4.FieldByName('ULTIMO_TITULAR').Value <> null) then
  codigo.Text := (IntToStr((ADOTable4.FieldByName('ULTIMO_TITULAR').Value)+1))
else
 codigo.Text:= IntToStr(1);

fecha.Text := DateToStr(Now);
end;

//el siguiente codigo se encuentra cuando en el evento click de un boton para grabar los datos

if bandera then
  begin
    propietario.conectaBD;
    propietario.ConectaTabla(1);
    if (propietario.busqueda(dni.Text,0,2)=True)then
    begin
     ShowMessage('Esta persona ya se encuentra cargada en el sistema');
     dni.SetFocus;
     dni.SelectAll;
     end
    else
    begin
      ADOTable4.Last;
      ADOTable4.Edit;
      ADOTable4.FieldByName('ULTIMO_TITULAR').AsInteger := StrToInt(codigo.Text);
      ADOTable4.Post;
      propietario.Desconectar;
      propietario.grabardatos;
      propietario.Free;
      validacion.Free;
      if MessageDlg('Continuar ingresando datos?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
      then
      begin
        if (ADOTable4.FieldByName('ULTIMO_TITULAR').Value <> null) then
        codigo.Text := (IntToStr((ADOTable4.FieldByName('ULTIMO_TITULAR').Value)+1))
        else
        codigo.Text:= IntToStr(1);
        Limpiar;
      end
      else
      begin
       Close;
       parametro.desconectar;
      end;

    end;
  end;


en donde bandera es una que utilizo para manejar las validaciones (si esta es verdadera significa que las validaciones son correctas), propietario es una clase y el ADOTABLE4 pertenece al AdoTable asociado con la tabla parametros.
Responder Con Cita
  #5  
Antiguo 16-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por nefore Ver Mensaje
Vaya, es lo que estaba buscando (en VB 6.0 tenia el Adotable.Columns) y no sabia como hacer algo parecido aca en Delphi. Lo probrare. Muchas gracias por tus respuestas me han ayudado mucho
Hola nefore.

En Delphi tenes más de una forma de acceder a las columnas de una tabla:
  • El campo persistente. (doble click sobre ADOTable->click derecho->Add fields/Add all fields)
  • La función FieldByName.
  • La propiedad vectorial Fields (mediante el índice de posición de la columna en el TDataSet).
  • La propiedad vectorial FieldValues.

Un ejemplo en que se muestra el valor de un mismo campo de los modos anteriores:
Código Delphi [-]
  with ListBox1.Items do
  begin
    Add(ADOTable1Field1.AsString);  // campo persistente
    Add(ADOTable1.FieldByName('Field1').Value); 
    Add(ADOTable1.Fields[0].AsString);
    Add(ADOTable1.FieldValues['Field1']); //(*)
  end;
(*) FieldValues es la propiedad vectorial por omisión (default), por lo que se puede escribir:
Código Delphi [-]
   ...
   Add(ADOTable1['Field1']);
Al ser un Variant no es necesario especificar el tipo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-06-2013 a las 06:56:10.
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
Añadir registro en tabla firebird si la tabla está vacia jafera Firebird e Interbase 19 22-08-2012 11:59:35
SelectedRows esta vacia Paulao Varios 2 12-03-2009 10:26:07
preguntar por una imagen si esta vacia ingel Gráficos 2 10-05-2007 19:22:14
UPDATE de un campo dependiendo del valor de un campo de otra tabla Javi2 SQL 5 18-04-2005 16:35:05
¿No se puede desactivar un ADOTABLE cuando la tabla está vacia? User_Baja_2 Conexión con bases de datos 1 12-06-2004 18:35:24


La franja horaria es GMT +2. Ahora son las 19:13:53.


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