converter codigo sql pra delphi

Delphi

31/07/2014

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
Eros Cardoso

Eros Cardoso

Curtidas 0

Melhor post

Renato Rubinho

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 !!
GOSTEI 1

Mais Respostas

Eros Cardoso

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
GOSTEI 0
Renato Rubinho

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.

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
POSTAR