FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
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; |
#3
|
|||
|
|||
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 |
#4
|
|||
|
|||
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; 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; 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; 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 |
|
|
|