Fórum converter codigo sql pra delphi #487471
31/07/2014
0
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
Curtir tópico
+ 0Post mais votado
31/07/2014
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 !!
Renato Rubinho
Gostei + 1
Mais Posts
07/08/2014
Eros Cardoso
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
08/08/2014
Renato Rubinho
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
Clique aqui para fazer login e interagir na Comunidade :)