Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Como averiguar si hay un campo en la Db

Hola, trabajo con Delphi4 y con Dbase y quisiera saber como puedo averiguar si una tabla tiene un determinado campo.

Por ejemplo: como saber si la base de datos de "proveedores" tiene el campo "fax" antes de poner la propiedad Active a true.

Un saludo
Jose Manuel
Responder Con Cita
  #2  
Antiguo 23-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
puedes recorrerte los campos del dataset y mirar si existe

Código:
var
  i : integer;
begin
  i := 0;
  while (i <= Table1.Fields.Count - 1) and (Table1.Fields[i].FieldName = 'fax') do
    inc(i);

  if i > Table1.Fields.Count - 1 then
    ShowMessage('no existe')
  else
    ShowMessage('existe');
end;
Responder Con Cita
  #3  
Antiguo 23-08-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Hola, el problema que hay que es son campos persistentes, de manera que siempre me dice que existe el campo en la tabla fDatamodulo.tbproveedores, pero luego si falta realmente el campo en la base de datos se produce el error.

Tambien he probado calculando el nº total de campos que debe tener la tabla, por ejemplo

If fDatamodulo.tbproveedor.FieldCount<=26 then "hay que actualizar"

pero esta instrucción siempre da el mismo nº de campos.

Gracias y saludo a todos
Jose Manuel
Responder Con Cita
  #4  
Antiguo 23-08-2003
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino

Código:
var
  i : integer;
begin
  i := 0;
  // Si  Fields[0].FieldName = 'Indice' (supongamos)
  // entonces no entra y te va a regresar que existe i = 0
  //mala rutina
  while (i <= Table1.Fields.Count - 1) and (Table1.Fields[i].FieldName = 'fax') do
    inc(i);

  if i > Table1.Fields.Count - 1 then
    ShowMessage('no existe')
  else
    ShowMessage('existe');

end;
Bueno la idea es la siguiente que tengas otra TTable que llame a la tabla
que llama fDatamodulo.tbproveedor pero sin campos persistentes, (supongamos que
la tabla se llama proveedor.db) puedes tener una ttable que se llame tbLibre y
a la hora que quieras probar eso entonces :

Código:
Function SeEncuentraCampo : Boolean;
Var
	I : Integer;
Begin
	Result := False;
  fDatamodulo.tbLibre.Close //por si esta abierta por algun lado
	fDatamodulo.tbLibre.TableName := 'proveedor.db';
 	fDatamodulo.tbLibre.Open;
 	While (I <= fDatamodulo.tbLibre.Fields.Count-1) And (Not Result) Do
 		If fDatamodulo.tbLibre.Fields[i].FieldName = 'fax' Then
  		Result := True
    Else
    	Inc(I);
  fDatamodulo.tbLibre.Close;
End;
Ahora si vas a usar esto para varias tablas solo hay que hacer unas pequeñas
modificaciones a lo anterior :

Código:
Function SeEncuentraCampo(NomTab,Campo : String) : Boolean;
Var
	I : Integer;
Begin
	Result := False;
  fDatamodulo.tbLibre.Close //por si esta abierta por algun lado
	fDatamodulo.tbLibre.TableName := NomTab;
 	fDatamodulo.tbLibre.Open;
 	While (I <= fDatamodulo.tbLibre.Fields.Count-1) And (Not Result) Do
 		If fDatamodulo.tbLibre.Fields[i].FieldName = Campo Then
  		Result := True
    Else
    	Inc(I);
  fDatamodulo.tbLibre.Close;
End;
entonces ya en el procedimiento grande

Código:
  if  SeEncuentraCampo('proveedor.db','fax') then
  Begin
      fDatamodulo.tbproveedor.open;    
     .
     .
  end
  Else
    ShowMessage('No existe el campillo');

Saludos desde Puebla Mexico
asanxt@hotmail.com
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 07:56:52.


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