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

Acessar banco de dados


dirleimoreira

Pergunta

Bom dia...

Estou com um pequeno problema... presciso fazer um codigo que acesse o banco de dados e copie uma tabela com outro nome, mas como sou novo no delphi não estou conseguindo... gostaria se possivel alguém me ajudasse com isso...

Tambem gostaria de saber se tem como acessar ela por codigo... tipo um script

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

então e assim... eu presciso entrar no db no qual estou usando um firebird, copiar uma tabela e essa copia gostaria de por ela com outro nome...

So que fora isso estou com muita dificuldade de conseguir mexer no db pelo delphi7, tentei usar hoje o IBO 4.9.9 para fazer a conexão, porem não esta dando certo...

Existe alguma string que eu possa utilizar para conectar??? ou vou ter q mesmo usar esses complementos tipo o IBO???

Link para o comentário
Compartilhar em outros sites

  • 0

boa noite amigo...

imagino que você está tendo dificuldades em ligar o bd ao delphi, devido que as vezes ele não tem driver nativo... no meu caso, utilizo sql server... ele já possui driver nativo no delphi, logo, é moleza...

quanto a copiar a tabela de um banco para outro, eu tenho aqui um utilitário que fiz para pegar dados de um bd de algum programa e passar para o meu... eu faço da seguinte forma:

crio 2 ADOConnection (utilizo componentes ADO)... um com meu banco e outro com o banco do cliente... ai, crio ADOQuery's com os dados da tabela do meu bd e outro(s) com dados da tabela do bd do meu cliente... a partir dai, eu pego e faço:

ADOQueryMeuBDCampo_Desejado1.AsString:= ADOQueryBDMeu_ClienteCampo_Desejado1.AsString;
ADOQueryMeuBDCampo_Desejado2.AsString:= ADOQueryBDMeu_ClienteCampo_Desejado2.AsString;
ou vice-versa... e por ai vai... quanto ao firebird, imagino que o delphi não terá driver nativo, logo, terá que achar na net... eu não sei te dizer o link (faz tempo que baixei), mas tenho aqui um driver ODBC para o firebird... procure no google por
Firebird_ODBC_2.0.0.148_win32
que encontrará... ai você instala e no ADOConnection encontrará o firebird... se isso tudo que lhe falei agora não for o que você solicitou, vai uma dica: para copiar uma tabela para outra (nova), não sei qual banco você utiliza, mas no sql server faço assim, mas imagino que a sintaxe não foge muito disso:
SELECT * INTO NomeNovaTabela FROM TabelaExistente WHERE 1=1

só para explicar: nessa sintaxe ele pega tudo (até a extrutura) da TabelaExistente e copia para a NomeNovaTabela...

WHERE 1=1
significa que além da estrutura, os dados também serão copiados... se colocar
WHERE 1=0
, copiará apenas a estrutura...

espero ter ajudado...

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

Consegui conectar no db pelo ado... mas adora não sei como colocar esse comando do firebird em delphi:

"

CREATE TABLE CIDADE

(

ID_CIDADE INTEGER NOT NULL,

CID_NOME VARCHAR(50) CHARACTER SET WIN1252 NOT NULL

COLLATE PXW_INTL850,

CID_UF CHAR(2) CHARACTER SET WIN1252 COLLATE PXW_INTL850,

CONSTRAINT PK_CIDADE PRIMARY KEY (ID_CIDADE)

);

"

Teria como executar os comandos do firebird pelo delphi em um button???

Link para o comentário
Compartilhar em outros sites

  • 0

Ola consegui fazer um codigo para o db não qual ele entra é criar um tabela segue abaixo:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ADODB, DB, StdCtrls;

type

TForm1 = class(TForm)

ADOConnection1: TADOConnection;

ADOQuery1: TADOQuery;

ADOTable1: TADOTable;

Button1: TButton;

ADOCommand1: TADOCommand;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var L:TStringList;

begin

{A classe TStringList é utilizada para armazenar e manipular

uma lista de strings. Através do método Add da classe é possível

inserir uma nova string a lista}

//criando Stringlist na memória

L := TStringList.Create;

//pega o nome da tabela

ADOConnection1.GetTableNames(L);

//pega a posição do tbteste(começa no 0)

if L.IndexOf('tbteste') >= 0 then

begin

Showmessage('Esta tabela já existe no BD!');

Abort

end

else

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('create table tbteste(');

ADOQuery1.Sql.Add('cod_teste integer not null primary key, ');

ADOQuery1.Sql.Add('nome_teste varchar(40))');

ADOQuery1.ExecSQL;

L.Free;

ShowMessage('Tabela Criada com sucesso!');

end;

end;

end.

Agora gostaria da sua ajuda para fazer esse codigo copiar uma tabela chamada menu ou tentar renomea- la... que assim o programa que estou tentando fazer tem q excluir essa tabela menu ou alterar o nome , para que um outro programa não funcione...

Editado por dirleimoreira
Link para o comentário
Compartilhar em outros sites

  • 0

bom, para copiar a tabela, com todos os dados e estrutura, já postei anteriormente... coloca ela numa ADOQuery e manda vê...

SELECT * INTO NomeNovaTabela FROM TabelaExistente WHERE 1=1
para renomear, faz assim (a mesma idéia, coloca na ADOQuery)...
ADOQuery1.Close;
ADOQuery1.Connection := Seu_ADOConnection;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('EXEC sp_rename TabelaNova, TabelaVelha');
ADOQuery1.ExecSQL();

espero ter ajudado

Editado por flavioavilela
Link para o comentário
Compartilhar em outros sites

  • 0

esse "ADOConnection1:" seria o nome do driver de conexao que eu instalei???

mais uma coisa... estava tentando fazer um pequeno codigo pra excluida a tabela depois, segue abaixo

procedure TForm1.Button1Click(Sender: TObject);

var L:TStringList;

begin

L := TStringList.Create;

ADOConnection1.GetTableNames(L);

if L.IndexOf('0MENU') >= 0 then

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.text := ( 'drop table 0MENU');

ADOQuery1.ExecSQL;

L.Free;

Showmessage('tabela excluida!');

end;

end;

end.

vo que não esta funcionando... esta faltando alguma coisa nele??

Link para o comentário
Compartilhar em outros sites

  • 0

o ADOConnection é o componente que liga o delphi ao bd... não é o driver de conexão e sim o componente que "recebe" esse driver e que liga, a grosso modo dizendo, o delphi ao banco... ele está na paleta dbGo, no meu caso aqui é o delphi 2010...

para deletar a tabela, faça:

DROP TABLE Nome_Tabela

pelo que vi ai, sua tabela chama Menu e você colocou no Drop Tabela 0Menu....

Link para o comentário
Compartilhar em outros sites

  • 0

seu objeto L, que é uma StringList, você cria ela no inicio... beleza...

quando você passa o primeiro comando para deletar a tabela Menu, ele deleta... só que, logo após isso, você libera da memória o L, com L.Free.... e logo após, você chama o L (que já está destruído) novamente para deletar o 1Menu... experimenta colocar o L.Free no final de tudo, após deletar a última tabela.... ou após liberar com L.Free e ao criar novamente o método para deletar o 1Menu, criar o L novamente com L:= TStringList.Create;

ou você pode criar um objeto StringList L1, L2, L3... enfim... um para cada tabela que deseja deletar... ai sim, você cria o L1, por exemplo, passa o comando para deletar e destroi com L1.Free. ai você cria o L2, passa o comando para deletar e destroi com L2.Free... e por ai vai...

espero ter ajudado...

Editado por flavioavilela
Link para o comentário
Compartilhar em outros sites

  • 0

vou tentar... qualquer coisa aviso

olha eu tentei seguir sua idea, segue abaixo:

procedure TForm1.Button1Click(Sender: TObject);
var L:TStringList;
L2:TStringList;
begin

L := TStringList.Create;

ADOConnection1.GetTableNames(L);

//pega a posição do tbteste(começa no 0)
    if L.IndexOf('MENU') >= 0 then
      begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text := ( 'drop table MENU');
      ADOQuery1.ExecSQL;
      L.Free;
      Showmessage('tabela menu excluida');
      end;

L2 := TStringList.Create;
ADOConnection1.GetTableNames(L2);
      if L2.IndexOf('0MENU') >= 0 then
      begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text := ( 'drop table 0MENU');
      ADOQuery1.ExecSQL;
      L2.Free;
      Showmessage('tabela 0MENU excluida');
      end;

end;
end.

Porem continua dando o mesmo erro, so que eu fiz um teste, se eu tentar dropa outra tabela sem ser OMENU e 1MENU funciona normal....

Link para o comentário
Compartilhar em outros sites

  • 0

bom, imagino que já seja uma questão de lógica esse caso... você verificou se as tabelas que não estão deletando tem algum relacionamento com outras tabelas? está sendo usada por outra ou algo parecido?

experimente fazer um breakpoint, para ver realmente em qual linha está dando o erro, as vezes fica mais fácil saber onde está o erro... você pode também, a título de testes, colocar só assim:

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := ( 'drop table 0MENU (ou qualquer outra que quiser... bom tentar fazer com as tres');
ADOQuery1.ExecSQL;

sem nenhum tipo de validação, só para ver se vai dar o erro ou não... tente fazer esses dois testes ai... esse que coloquei em código e o breakpoint...

Link para o comentário
Compartilhar em outros sites

  • 0

tente deletar qualquer tabela só com esse comando:

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := ( 'drop table 0MENU (ou qualquer outra que quiser... bom tentar fazer com as tres');
ADOQuery1.ExecSQL;

outra coisa... eu digo pra você fazer um breakpoint, funciona assim: supondo que seja um botão que você aperta para executar esse comando... vai na janela de codificação e posiciona o cursor na primeira linha (excluindo a linha que cria a procedure, que cria variaveis e etc, a primeira linha "valida") e pressione F5... você vai ver que vai aparecer uma bolinha vermelha do lado esquerdo.......... dai, executa a aplicação... quando você clicar no botão para executar o comando desejado, o foco vai parar em cima dessa linha que você escolheu e pressinou F5... dai, você vai pressionando F8 para prosseguir com o cursor... dai, você vai saber em qual linha de comando ele vai dar o erro... dai você posta ai qual a linha que deu erro ou então já vai sacar na hora porque que está dando erro..... sacou???

espero ter ajudado... qualquer coisa, posta ai...

Link para o comentário
Compartilhar em outros sites

  • 0

olha tentei seguir o que você passou para copiar a tabela depois exclui, so que não deu certo, segue abaixo:

if L.IndexOf('1MENU') >= 0 then
      begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text := ('SELECT * INTO 1MENU02 FROM 1MENU WHERE 1=1 ');
      ADOQuery1.SQL.Text := ( 'DROP TABLE "1MENU";');
      ADOQuery1.ExecSQL;
      end;

o que eu fiz errado???

Link para o comentário
Compartilhar em outros sites

  • 0

pelo que vi, tem um ; logo após o "1Menu", na linha do drop... como disse anteriormente, faça um breakpoint e veja em qual linha está o erro... ai você posta em qual linha está ou você mesmo já ve o que está de errado... acabei de fazer um teste aqui sem o ; deu tudo certo...

Editado por flavioavilela
Link para o comentário
Compartilhar em outros sites

  • 0

bom, acabei de fazer outro teste pelo delphi, fiz assim:

var
    qAux: TADOQuery;
begin
  qAux:= TADOQuery.Create(self); //estou criando a query em tempo de execução, mas, pode-se colocar igual está fazendo
  with qAux, sql do
  begin
    close;
    Connection:= dm.ADOConnection1;
    clear;
    add('select * into Teste2 from teste where 1=1');
    ExecSQL;
  end;
end;
faça rigorosamente igual eu fiz, veja se da certo... eu acabei de testar, funcionou perfeitamente... faça igual, sem tirar sem por nada.... crie uma tabela chamada teste e faça igual o código acima...... depois, troca o nome das tabelas (para o nome das suas), apenas isso e veja se da certo... é pra funcionar, pois aqui funcionou perfeitamente.... outra coisa... o meu banco é sql server, o seu, pelo que vi é firebird... pode ser que a sintaxe seja diferente... tente assim:
Insert into <TABELA_Destino> (<Campo1>, <Campo2>, .. , <Campon>) Select <Campo1>, <Campo2>, .., <Campon> From <Tabela_Origem>

alterando o nome da tabela de origem e destino e os campos..

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...