converter codigo sql pra delphi
Bom dia gostaria de converter um codigo sql para dephi
converter esse codigo SQL 2000
SELECT TBConta.NomeConta, TBProjeto.NomeProjeto, TBProjeto.CodigoProjetoCompleto, TBConta.NumeroConta
FROM TBConta INNER JOIN
TBProjetoConta ON TBConta.IDConta = TBProjetoConta.IDConta INNER JOIN
TBProjeto ON TBProjetoConta.IDProjeto = TBProjeto.IDProjeto
WHERE (TBConta.NomeConta LIKE '1461-3%')
para Delphi 7, tentei isso aqui de baixo, mas nao é o que quero
SQL.Add('SELECT TBConta.NomeConta, TBProjeto.NomeProjeto, TBProjeto.CodigoProjetoCompleto');
SQL.Add('FROM TBConta INNER JOIN');
SQL.Add('TBProjetoConta ON TBConta.IDConta = TBProjetoConta.IDConta INNER JOIN');
SQL.Add('TBProjeto ON TBProjetoConta.IDProjeto = TBProjeto.IDProjeto');
SQL.Add('WHERE (nomeconta LIKE '+#39+'%'+let+'%'+#39+')');
Na ultima linha, onde tem where, se eu nao digitar o nome da conta e clicar em pesquisar pega todos os dados da tabela, eu queria algo como nomeconta = 1461-3 (deixasse esse valor fixo) para quando eu colocasse uma outra pesquisa, so pesquisasse o que tivesse dentro dessa conta 1461-3 igual no sql acima
[img:descricao=img]https://imagizer.imageshack.us/v2/464x235q90/661/PN47II.jpg[/img]
obs: let é uma variavel string que criei e fica dentro do Edit1.Text
obs2; estou usando ADOQuery, junto com ADOConnection1 e DataSource1 para fazer a conexao com o BD
converter esse codigo SQL 2000
SELECT TBConta.NomeConta, TBProjeto.NomeProjeto, TBProjeto.CodigoProjetoCompleto, TBConta.NumeroConta
FROM TBConta INNER JOIN
TBProjetoConta ON TBConta.IDConta = TBProjetoConta.IDConta INNER JOIN
TBProjeto ON TBProjetoConta.IDProjeto = TBProjeto.IDProjeto
WHERE (TBConta.NomeConta LIKE '1461-3%')
para Delphi 7, tentei isso aqui de baixo, mas nao é o que quero
SQL.Add('SELECT TBConta.NomeConta, TBProjeto.NomeProjeto, TBProjeto.CodigoProjetoCompleto');
SQL.Add('FROM TBConta INNER JOIN');
SQL.Add('TBProjetoConta ON TBConta.IDConta = TBProjetoConta.IDConta INNER JOIN');
SQL.Add('TBProjeto ON TBProjetoConta.IDProjeto = TBProjeto.IDProjeto');
SQL.Add('WHERE (nomeconta LIKE '+#39+'%'+let+'%'+#39+')');
Na ultima linha, onde tem where, se eu nao digitar o nome da conta e clicar em pesquisar pega todos os dados da tabela, eu queria algo como nomeconta = 1461-3 (deixasse esse valor fixo) para quando eu colocasse uma outra pesquisa, so pesquisasse o que tivesse dentro dessa conta 1461-3 igual no sql acima
[img:descricao=img]https://imagizer.imageshack.us/v2/464x235q90/661/PN47II.jpg[/img]
obs: let é uma variavel string que criei e fica dentro do Edit1.Text
obs2; estou usando ADOQuery, junto com ADOConnection1 e DataSource1 para fazer a conexao com o BD
Eros Cardoso
Curtidas 0
Melhor post
Renato Rubinho
31/07/2014
Buenos,
Se entendi bem o que você precisa, é só adicionar mais uma cláusula pegando apenas o que for "LIKE 1461-3%".
Isso limitaria apenas estas contas.
A cláusula que você já havia posto faria o "segundo filtro" com o que você digitar no edit.
SQL.Add('SELECT TBConta.NomeConta, TBProjeto.NomeProjeto, TBProjeto.CodigoProjetoCompleto');
SQL.Add('FROM TBConta INNER JOIN');
SQL.Add('TBProjetoConta ON TBConta.IDConta = TBProjetoConta.IDConta INNER JOIN');
SQL.Add('TBProjeto ON TBProjetoConta.IDProjeto = TBProjeto.IDProjeto');
SQL.Add('WHERE (nomeconta LIKE '+#39+'1461-3%'+#39+')'); // esta linha filtra tudo que for da conta 1461-3%
SQL.Add('AND (nomeconta LIKE '+#39+'%'+let+'%'+#39+')'); // esta linha filtra o que colocar no edit.
Abraççç,
Renato
!! Tudo é possível com Delphi, só com Delphi faz-se o impossível !!
Se entendi bem o que você precisa, é só adicionar mais uma cláusula pegando apenas o que for "LIKE 1461-3%".
Isso limitaria apenas estas contas.
A cláusula que você já havia posto faria o "segundo filtro" com o que você digitar no edit.
SQL.Add('SELECT TBConta.NomeConta, TBProjeto.NomeProjeto, TBProjeto.CodigoProjetoCompleto');
SQL.Add('FROM TBConta INNER JOIN');
SQL.Add('TBProjetoConta ON TBConta.IDConta = TBProjetoConta.IDConta INNER JOIN');
SQL.Add('TBProjeto ON TBProjetoConta.IDProjeto = TBProjeto.IDProjeto');
SQL.Add('WHERE (nomeconta LIKE '+#39+'1461-3%'+#39+')'); // esta linha filtra tudo que for da conta 1461-3%
SQL.Add('AND (nomeconta LIKE '+#39+'%'+let+'%'+#39+')'); // esta linha filtra o que colocar no edit.
Abraççç,
Renato
!! Tudo é possível com Delphi, só com Delphi faz-se o impossível !!
GOSTEI 1
Mais Respostas
Eros Cardoso
31/07/2014
Era isso mesmo que eu queria rubinho, obrigado deu certo aqui
Deixa eu so tirar mais uma duvida
Vc sabe como alinhar as colunas do dbgrid? é pq aqui uma coluna fica muito grande e outra pequena, gostaria de deixar as colunas para ficarem todas certas ate o limite de palavras de cada coluna
Deixa eu so tirar mais uma duvida
Vc sabe como alinhar as colunas do dbgrid? é pq aqui uma coluna fica muito grande e outra pequena, gostaria de deixar as colunas para ficarem todas certas ate o limite de palavras de cada coluna
GOSTEI 0
Renato Rubinho
31/07/2014
Buenos,
Não me recordo de nenhum método nativo para isso. Se encontrar algo, posta aí para a gente.
Você pode atualizar com valores fixos por tipo de campo.
Se sua query não retornar muitos registros, pode varrer e preencher um array e depois alimentar as colunas:
Não me recordo de nenhum método nativo para isso. Se encontrar algo, posta aí para a gente.
Você pode atualizar com valores fixos por tipo de campo.
var
i: Integer;
begin
// Tamanhos fixos por tipo de campo
for i := 0 to DBGrid1.Columns.Count - 1 do
begin
if DBGrid1.Columns[i].Field.DataType = ftInteger then
DBGrid1.Columns[i].Width := 10
else if DBGrid1.Columns[i].Field.DataType = ftString then
DBGrid1.Columns[i].Width := 200;
// coloque os demais campos com tamanhos fixos determinados
end;
Se sua query não retornar muitos registros, pode varrer e preencher um array e depois alimentar as colunas:
var
i : Integer;
aTamCampos: array of integer;
begin
DBGrid1.DataSource.DataSet.DisableControls;
DBGrid1.DataSource.DataSet.First;
SetLength(aTamCampos,DBGrid1.Columns.Count);
// Loop nos registros
while not DBGrid1.DataSource.DataSet.Eof do
begin
// Loop nas colunas buscando maior largura
for i := 0 to DBGrid1.Columns.Count - 1 do
begin
if DBGrid1.Columns[i].Field.DataType = ftInteger then
begin
if Length(IntToStr(DBGrid1.Columns[i].Field.AsInteger)) > aTamCampos[i] then
aTamCampos[i] := Length(IntToStr(DBGrid1.Columns[i].Field.AsInteger));
end
else if DBGrid1.Columns[i].Field.DataType = ftString then
begin
if Length(DBGrid1.Columns[i].Field.AsString) > aTamCampos[i] then
aTamCampos[i] := Length(DBGrid1.Columns[i].Field.AsString);
end;
// coloque os demais tipos de campo para pegar o tamanho
end;
DBGrid1.DataSource.DataSet.Next;
end;
// Tamanhos fixos por tipo de campo
for i := 0 to DBGrid1.Columns.Count - 1 do
if aTamCampos[i] > 0 then
DBGrid1.Columns[i].Width := aTamCampos[i] * 8; // calcule um índice para a quantidade de bytes x tamanho em pixels
DBGrid1.DataSource.DataSet.EnableControls;
GOSTEI 0