Ir para conteúdo
Fórum Script Brasil
  • 0

Saber Se Um Campo já Existe Em Uma Tabela Mysql


Guest Alessandro gomes

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 0
Como faço, em delphi(estou usando o zeos), para saber se um campo já existem em uma tabela mysql
Alessandro, a idéia proposta é criar uma função genérica (poderia ser colocada em uma unit de utilidades), mas que neste caso, serve apenas para uso com Zeos e MySQL (a idéia pode ser facilmente adaptada à outros).

A primeira sugestão é específica para MySQL, pois faz uso de tabela de sistema do banco (há similares em outros bancos - questão de adaptação):

function CheckField(Connection :TZConnection; TableName, FieldName :string) :boolean;
var
  QryCheck :TZQuery;
begin
  Result := False;
  QryCheck := TZQuery.Create(nil);
  QryCheck.Connection := Connection;
  QryCheck.SQL.Add('SELECT COLUMN_NAME');
  QryCheck.SQL.Add('FROM INFORMATION_SCHEMA.COLUMNS');
  QryCheck.SQL.Add('WHERE table_name = '''+TableName+'''');
  try
    QryCheck.Open;
    Result := QryCheck.Locate('COLUMN_NAME', FieldName, [loCaseInsensitive]);
    QryCheck.Close;
  finally
    QryCheck.Free;
  end;
end;
A segunda opção, mas fácil de ajustar para outros bancos, seria utilizar um TZQuery e fazer um SELECT que ao abrir a query resultará nos campos existentes na tabela. Para evitar tráfego de muitas informações na rede, poderíamos fazer uso da instrução LIMIT presente na sintax do SELECT no MySQL, já que nosso objetivo não seria a obtenção dos dados mas sim o nome dos campos. Deste modo, após o open da query você terá na propriedade Fields todos os campos constantes da tabela e poderá procurar pelo que você deseja saber se existe ou não. Ficaria assim:
function CheckField(Connection :TZConnection; TableName, FieldName :string) :boolean;
var
  QryCheck :TZQuery;
begin
  Result := False;
  QryCheck := TZQuery.Create(nil);
  QryCheck.Connection := Connection;
  QryCheck.SQL.Add('select * from '+TableName+' limit 0');
  try
    QryCheck.Open;
    Result := Assigned(QryCheck.FindField(FieldName));
    QryCheck.Close;
  finally
    QryCheck.Free;
  end;
end;
exemplo de uso da função:
...
  if CheckField(ZConnection1, 'usuario', 'nome') then
    ShowMessage('Ok')
  else
    ShowMessage('Não existe!');
...

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...