Erro de Sql.add
Boa noite a todos, estou com um problema numa consulta para selecionar alguns itens obtidos num grid(multiselect) e importados para uma lista.
Toda vez que executo recebo um erro de Token ) Line 8.
Segue a consulta abaixo.
Var
i : integer;
Begin
qry.active := false;
qry.sql.Clear;
qry.SQL.Add( ´SELECT Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, ´);
qry.SQL.Add( ´ Listas.CEP, Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, ´);
qry.SQL.Add( ´ Material.TIPO_ITEM, Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, ´);
qry.SQL.Add( ´ Turmas.TURNO, Turmas.SERIE, Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
qry.SQL.Add( ´ FROM ´´LISTAS.DBF´´ Listas, ´´MATERIAL.DBF´´ Material, ´´TURMAS.DBF´´ Turmas, ´´:Livro1:TITULOS.DBF´´ Titulos, ´);
qry.SQL.Add( ´ ´´ESCOLAS.DBF´´ Escolas, ´´:Livro1:EDITORES.DBF´´ Editores ´);
qry.SQL.Add( ´ WHERE LISTAS.CODLISTA IN (´ );
for i:=0 to lista.count - 1 do
qry.SQL.Add(Lista.Strings[i]);
qry.SQL.Add(´ ) ´);
qry.SQL.Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA) ´);
qry.SQL.Add(´ AND (Material.CODLISTA = Listas.CODLISTA) ´);
qry.SQL.Add(´ AND (Listas.TURMA = Turmas.TURMA) ´);
qry.SQL.Add(´ AND (Material.CODIGO = Titulos.CODITEM) ´);
qry.SQL.Add(´ AND (Material.CODEDIT = Editores.CODEDIT) ´);
qry.SQL.Add(´ GROUP BY (Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, Listas.CEP, ´);
qry.SQL.Add(´ Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, Material.TIPO_ITEM, ´);
qry.SQL.Add(´ Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, Turmas.TURNO, Turmas.SERIE, ´);
qry.SQL.Add(´ Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT)´);
qry.Active := True;
lista.Clear;
Um Abraço a todos e agradeço a ajuda.
Toda vez que executo recebo um erro de Token ) Line 8.
Segue a consulta abaixo.
Var
i : integer;
Begin
qry.active := false;
qry.sql.Clear;
qry.SQL.Add( ´SELECT Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, ´);
qry.SQL.Add( ´ Listas.CEP, Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, ´);
qry.SQL.Add( ´ Material.TIPO_ITEM, Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, ´);
qry.SQL.Add( ´ Turmas.TURNO, Turmas.SERIE, Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
qry.SQL.Add( ´ FROM ´´LISTAS.DBF´´ Listas, ´´MATERIAL.DBF´´ Material, ´´TURMAS.DBF´´ Turmas, ´´:Livro1:TITULOS.DBF´´ Titulos, ´);
qry.SQL.Add( ´ ´´ESCOLAS.DBF´´ Escolas, ´´:Livro1:EDITORES.DBF´´ Editores ´);
qry.SQL.Add( ´ WHERE LISTAS.CODLISTA IN (´ );
for i:=0 to lista.count - 1 do
qry.SQL.Add(Lista.Strings[i]);
qry.SQL.Add(´ ) ´);
qry.SQL.Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA) ´);
qry.SQL.Add(´ AND (Material.CODLISTA = Listas.CODLISTA) ´);
qry.SQL.Add(´ AND (Listas.TURMA = Turmas.TURMA) ´);
qry.SQL.Add(´ AND (Material.CODIGO = Titulos.CODITEM) ´);
qry.SQL.Add(´ AND (Material.CODEDIT = Editores.CODEDIT) ´);
qry.SQL.Add(´ GROUP BY (Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, Listas.CEP, ´);
qry.SQL.Add(´ Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, Material.TIPO_ITEM, ´);
qry.SQL.Add(´ Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, Turmas.TURNO, Turmas.SERIE, ´);
qry.SQL.Add(´ Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT)´);
qry.Active := True;
lista.Clear;
Um Abraço a todos e agradeço a ajuda.
Rogerioluz
Curtidas 0
Respostas
Emerson Nascimento
29/12/2004
tente assim:
Var
    i : integer;
    sVirgula: string[1];
Begin
    sVirgula := ´,´;
    qry.close;
    qry.sql.Clear;
    qry.SQL.Add( ´SELECT Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, ´);
    qry.SQL.Add( ´ Listas.CEP, Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, ´);
    qry.SQL.Add( ´ Material.TIPO_ITEM, Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, ´);
    qry.SQL.Add( ´ Turmas.TURNO, Turmas.SERIE, Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
    qry.SQL.Add( ´ FROM ´´LISTAS.DBF´´ Listas, ´´MATERIAL.DBF´´ Material, ´´TURMAS.DBF´´ Turmas, ´´:Livro1:TITULOS.DBF´´ Titulos, ´);
    qry.SQL.Add( ´ ´´ESCOLAS.DBF´´ Escolas, ´´:Livro1:EDITORES.DBF´´ Editores ´);
    qry.SQL.Add( ´ WHERE LISTAS.CODLISTA IN (´ );
    for i:=0 to lista.count - 1 do
    begin
        if i = lista.count - 1
        then sVirgula := ´´;
        // coloquei a função QuotedStr() porque
        // suponho que o campo LISTAS.CODLISTA seja alfanumérico.
        // se não fôr, basta retirar a função.
        // a variável sVirgula é o separador dos itens da lista
        qry.SQL.Add( QuotedStr(Lista.Strings[i])+sVirgula);
    end;
    qry.SQL.Add(´ ) ´);
    qry.SQL.Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA) ´);
    qry.SQL.Add(´ AND (Material.CODLISTA = Listas.CODLISTA) ´);
    qry.SQL.Add(´ AND (Listas.TURMA = Turmas.TURMA) ´);
    qry.SQL.Add(´ AND (Material.CODIGO = Titulos.CODITEM) ´);
    qry.SQL.Add(´ AND (Material.CODEDIT = Editores.CODEDIT) ´);
    qry.SQL.Add(´ GROUP BY Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, Listas.CEP, ´);
    qry.SQL.Add(´ Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, Material.TIPO_ITEM, ´);
    qry.SQL.Add(´ Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, Turmas.TURNO, Turmas.SERIE, ´);
    qry.SQL.Add(´ Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
    qry.Open;
    lista.Clear;
Var
    i : integer;
    sVirgula: string[1];
Begin
    sVirgula := ´,´;
    qry.close;
    qry.sql.Clear;
    qry.SQL.Add( ´SELECT Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, ´);
    qry.SQL.Add( ´ Listas.CEP, Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, ´);
    qry.SQL.Add( ´ Material.TIPO_ITEM, Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, ´);
    qry.SQL.Add( ´ Turmas.TURNO, Turmas.SERIE, Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
    qry.SQL.Add( ´ FROM ´´LISTAS.DBF´´ Listas, ´´MATERIAL.DBF´´ Material, ´´TURMAS.DBF´´ Turmas, ´´:Livro1:TITULOS.DBF´´ Titulos, ´);
    qry.SQL.Add( ´ ´´ESCOLAS.DBF´´ Escolas, ´´:Livro1:EDITORES.DBF´´ Editores ´);
    qry.SQL.Add( ´ WHERE LISTAS.CODLISTA IN (´ );
    for i:=0 to lista.count - 1 do
    begin
        if i = lista.count - 1
        then sVirgula := ´´;
        // coloquei a função QuotedStr() porque
        // suponho que o campo LISTAS.CODLISTA seja alfanumérico.
        // se não fôr, basta retirar a função.
        // a variável sVirgula é o separador dos itens da lista
        qry.SQL.Add( QuotedStr(Lista.Strings[i])+sVirgula);
    end;
    qry.SQL.Add(´ ) ´);
    qry.SQL.Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA) ´);
    qry.SQL.Add(´ AND (Material.CODLISTA = Listas.CODLISTA) ´);
    qry.SQL.Add(´ AND (Listas.TURMA = Turmas.TURMA) ´);
    qry.SQL.Add(´ AND (Material.CODIGO = Titulos.CODITEM) ´);
    qry.SQL.Add(´ AND (Material.CODEDIT = Editores.CODEDIT) ´);
    qry.SQL.Add(´ GROUP BY Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, Listas.CEP, ´);
    qry.SQL.Add(´ Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, Material.TIPO_ITEM, ´);
    qry.SQL.Add(´ Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, Turmas.TURNO, Turmas.SERIE, ´);
    qry.SQL.Add(´ Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
    qry.Open;
    lista.Clear;
GOSTEI 0
Emerson Nascimento
29/12/2004
melhorando um pouco:
Var
    i : integer;
    sVirgula: string[1];
Begin
    sVirgula := ´,´;
    qry.close;
    qry.sql.Clear;
    qry.SQL.Add( ´SELECT Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, ´);
    qry.SQL.Add( ´ Listas.CEP, Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, ´);
    qry.SQL.Add( ´ Material.TIPO_ITEM, Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, ´);
    qry.SQL.Add( ´ Turmas.TURNO, Turmas.SERIE, Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
    qry.SQL.Add( ´ FROM ´´LISTAS.DBF´´ Listas, ´´MATERIAL.DBF´´ Material, ´´TURMAS.DBF´´ Turmas, ´´:Livro1:TITULOS.DBF´´ Titulos, ´);
    qry.SQL.Add( ´ ´´ESCOLAS.DBF´´ Escolas, ´´:Livro1:EDITORES.DBF´´ Editores ´);
    qry.SQL.Add( ´ WHERE LISTAS.CODLISTA IN (´ );
    for i:=0 to lista.count - 1 do
    begin
        if i = lista.count - 1
        then sVirgula := ´´;
        // coloquei a função QuotedStr() porque
        // suponho que o campo LISTAS.CODLISTA seja alfanumérico.
        // se não fôr, basta retirar a função.
        // a variável sVirgula é o separador dos itens da lista
        qry.SQL.Add( QuotedStr(Lista.Strings[i])+sVirgula);
    end;
    qry.SQL.Add(´ ) ´);
    qry.SQL.Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA) ´);
    qry.SQL.Add(´ AND (Material.CODLISTA = Listas.CODLISTA) ´);
    qry.SQL.Add(´ AND (Listas.TURMA = Turmas.TURMA) ´);
    qry.SQL.Add(´ AND (Material.CODIGO = Titulos.CODITEM) ´);
    qry.SQL.Add(´ AND (Material.CODEDIT = Editores.CODEDIT) ´);
    qry.Open;
    lista.Clear;
Note que não existe mais a cláusula GROUP BY. ela era totalmente inútil na sua instrução, visto que você não utilizava nenhum campo agregado.
Var
    i : integer;
    sVirgula: string[1];
Begin
    sVirgula := ´,´;
    qry.close;
    qry.sql.Clear;
    qry.SQL.Add( ´SELECT Listas.CODLISTA, Listas.TURMA, Listas.RESPONS, Listas.ALUNO, Listas.BAIRRO, ´);
    qry.SQL.Add( ´ Listas.CEP, Listas.TELEFONE, Listas.ESTADO_L, Escolas.NOMESCOLA, Material.CODLISTA, ´);
    qry.SQL.Add( ´ Material.TIPO_ITEM, Material.CODIGO, Material.QUANTIDADE, Material.PRECO, Material.CODEDIT, ´);
    qry.SQL.Add( ´ Turmas.TURNO, Turmas.SERIE, Turmas.GRAU, Titulos.NOMITEM, Editores.NOMEDIT ´);
    qry.SQL.Add( ´ FROM ´´LISTAS.DBF´´ Listas, ´´MATERIAL.DBF´´ Material, ´´TURMAS.DBF´´ Turmas, ´´:Livro1:TITULOS.DBF´´ Titulos, ´);
    qry.SQL.Add( ´ ´´ESCOLAS.DBF´´ Escolas, ´´:Livro1:EDITORES.DBF´´ Editores ´);
    qry.SQL.Add( ´ WHERE LISTAS.CODLISTA IN (´ );
    for i:=0 to lista.count - 1 do
    begin
        if i = lista.count - 1
        then sVirgula := ´´;
        // coloquei a função QuotedStr() porque
        // suponho que o campo LISTAS.CODLISTA seja alfanumérico.
        // se não fôr, basta retirar a função.
        // a variável sVirgula é o separador dos itens da lista
        qry.SQL.Add( QuotedStr(Lista.Strings[i])+sVirgula);
    end;
    qry.SQL.Add(´ ) ´);
    qry.SQL.Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA) ´);
    qry.SQL.Add(´ AND (Material.CODLISTA = Listas.CODLISTA) ´);
    qry.SQL.Add(´ AND (Listas.TURMA = Turmas.TURMA) ´);
    qry.SQL.Add(´ AND (Material.CODIGO = Titulos.CODITEM) ´);
    qry.SQL.Add(´ AND (Material.CODEDIT = Editores.CODEDIT) ´);
    qry.Open;
    lista.Clear;
Note que não existe mais a cláusula GROUP BY. ela era totalmente inútil na sua instrução, visto que você não utilizava nenhum campo agregado.
GOSTEI 0
Massuda
29/12/2004
Mais um detalhe... você precisa garantir que a lista contenha pelo menos um item. Uma lista vazia irá dar problema.
GOSTEI 0
Adilsond
29/12/2004
var i: Integer; S: String; begin S := ´´; if Lista.Count > 0 then begin S := Lista.Strings[0]; if Lista.Count > 1 then for i := 1 to Lista.Count - 1 do S := ´,´ + Lista.Strings[i]; end; with Qry do begin if Active then Close; with SQL do begin Clear; Add(´SELECT DISTINCT´); Add(´ Listas.CODLISTA,´); Add(´ Listas.TURMA,´); Add(´ Listas.RESPONS,´); Add(´ Listas.ALUNO,´); Add(´ Listas.BAIRRO,´); Add(´ Listas.CEP,´); Add(´ Listas.TELEFONE,´); Add(´ Listas.ESTADO_L,´); Add(´ Escolas.NOMESCOLA,´); Add(´ Material.CODLISTA,´); Add(´ Material.TIPO_ITEM,´); Add(´ Material.CODIGO,´); Add(´ Material.QUANTIDADE,´); Add(´ Material.PRECO,´); Add(´ Material.CODEDIT,´); Add(´ Turmas.TURNO,´); Add(´ Turmas.SERIE,´); Add(´ Turmas.GRAU,´); Add(´ Titulos.NOMITEM,´); Add(´ Editores.NOMEDIT´); Add(´FROM ´ + QuotedStr(´LISTAS.DBF´) + ´ Listas,´); Add(´ ´ + QuotedStr(´MATERIAL.DBF´) + ´ Material,´); Add(´ ´ + QuotedStr(´TURMAS.DBF´) + ´ Turmas,´); Add(´ ´ + QuotedStr(´:Livro1:TITULOS.DBF´) + ´ Titulos,´); Add(´ ´ + QuotedStr(´ESCOLAS.DBF´) + ´ Escolas,´); Add(´ ´ + QuotedStr(´:Livro1:EDITORES.DBF´) + ´ Editores´); if S = ´´ then Add(´WHERE (Listas.CODESCOLA = Escolas.CODESCOLA)´) else begin Add(´WHERE (LISTAS.CODLISTA IN (´ + S + ´))´); Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA)´); end; Add(´ AND (Listas.CODESCOLA = Escolas.CODESCOLA)´); Add(´ AND (Material.CODLISTA = Listas.CODLISTA)´); Add(´ AND (Listas.TURMA = Turmas.TURMA)´); Add(´ AND (Material.CODIGO = Titulos.CODITEM)´); Add(´ AND (Material.CODEDIT = Editores.CODEDIT)´); end; Open; end; Lista.Clear; end;
GOSTEI 0