Sql error code = -104

20/01/2006

Olá pessoal estou com o seguinte problema !

Tenho uma tabela usuario e outra perfil!

Está assim na tabela usuário:

ADD CONSTRAINT ´FK_USUARIO_PERFIL´ FOREIGN KEY (´NIVEL´) REFERENCES ´PERFIL´ (´ID´)

Tabela Perfil :

CONSTRAINT ´PK_PERFIL´ PRIMARY KEY (´ID´)

O meu Sql de acesso está assim :

select * from USUARIO, PERFIL
WHERE usuario.nivel = perfil.ID

Esta sentença está num IBQuery no form Login, ligado ao DM.IBDatabase e o DM.Ds, mas me confundi, pois tem um Ds no form tambem, mas como está dando erro de sql , não o que fazer ! como posso resolver ?

valeu....


Ingawebfm

Respostas

21/01/2006

Edilcimar

este campo usuário tem acento ou cedilha?


Responder Citar

21/01/2006

Ingawebfm

Edilcimar, no meu caso usuario é uma tabela, e quanto a cedilha não entendi o que você quis dizer, meu banco é firebird !

Vou colocar minhas tabelas !

CREATE TABLE ´USUARIO´
(
´ID´ INTEGER NOT NULL,
´STATUS´ VARCHAR(1),
´MARCA´ VARCHAR(1),
´DATA_INC´ DATE,
´DATA_ALT´ DATE,
´DATA_HAB´ DATE,
´SENHA´ CHAR(7),
´LOGIN´ VARCHAR(15),
´DPTO´ VARCHAR(20),
´NIVEL´ CHAR(1),
CONSTRAINT ´PK_USUARIO´ PRIMARY KEY (´ID´)
);
ALTER TABLE ´USUARIO´ ADD CONSTRAINT ´FK_USUARIO_PERFIL´ FOREIGN KEY (´NIVEL´) REFERENCES ´PERFIL´ (´ID´);



CREATE TABLE ´PERFIL´ // (Resumido)
(
´ID´ CHAR(1) NOT NULL,
´STATUS´ VARCHAR(1),
´MARCA´ VARCHAR(1),
´DATA_INC´ DATE,
´DATA_ALT´ DATE,
´DATA_HAB´ DATE,
´OCULTAR´ VARCHAR(1),
CONSTRAINT ´PK_PERFIL´ PRIMARY KEY (´ID´)
);

O SQL funciona mas quando rodo a aplicação e vou fazer o login, dá o erro SQL error code = -104 !


Responder Citar

21/01/2006

Edilcimar

se alguma palavra na tabela tiver acento ou cedilha ´Ç,ç´ e vc não estiver utilizando um charset que permita estas coisas, vai dar erro


Responder Citar

21/01/2006

Ingawebfm

Edilcimar, obrigado pela dica, mas ainda não consegui resolver meu problema vou colocar aqui o procedimento onde ocorre o erro se alguém puder analisar.... valeu !

procedure TLogin.Button1Click(Sender: TObject);
var
strSqlLog: string;
begin
strSqlLog:= ´select * from usuario,perfil WHERE usuario.nivel = perfil.id´;
strSqlLog:= strSqlLog + ´AND Login = ´ + #39 + (valorNome.Text) + 39;
strSqlLog:= strSqlLog + ´AND senha = ´ + 39 + (valorSenha.Text) + 39;

menuPrin.QueryLogin.Close;
menuPrin.QueryLogin.SQL.Clear;
menuPrin.QueryLogin.SQL.Add(strSqlLog);
menuPrin.QueryLogin.Open;

if (menuPrin.QueryLogin.RecordCount) = 1 then
begin
MenuPrin.StatusBar1.Panels[2].Text:= ´´ + ´Usuário: ´ + Login.ValorNome.Text +
´ - ´ + menuPrin.QueryLogin.FieldByName(´Dpto´).AsString;
Login.Close;
end;

:idea:


Responder Citar

21/01/2006

Vinicius2k

Colega,

Observei aspas no seu script. Você utilizou as aspas no momento da criação da base?
Se sim, precisará utilizá-las sempre, também nas instruções SQL.
Além disso, ao utilizar aspas, maiúsculas e minúsculas fazem diferença:
select * from "USUARIO", "PERFIL"
where "USUARIO"."NIVEL" = "PERFIL"."ID"

Se for este o caso, sugiro que recrie a base sem utilizar as aspas.

No procedimento que você postou, existe erro por falta de ´espaços´. Isto justifica o código de erro. Eu faria desta forma:
strSqlLog := ´select * from USUARIO, PERFIL where USUARIO.NIVEL = PERFIL.ID ´; 
strSqlLog := strSqlLog + ´and LOGIN = ´ + QuotedStr(valorNome.Text) + ´ ´; 
strSqlLog := strSqlLog + ´and SENHA = ´ + QuotedStr(valorSenha.Text);

//ou

strSqlLog := ´select * from USUARIO, PERFIL where USUARIO.NIVEL = PERFIL.ID´ + #32; 
strSqlLog := strSqlLog + ´and LOGIN = ´ + QuotedStr(valorNome.Text) + #32; 
strSqlLog := strSqlLog + ´and SENHA = ´ + QuotedStr(valorSenha.Text);


T+


Responder Citar

21/01/2006

Ingawebfm

Olá Vinicius !

As aspas não usei, foi só um exemplo do MetaData banco,Ctrl+C + Ctrl+V;

Era isso mesmo que estava acontecendo erro falta de ´espaço´, fiquei me perguntando o que é isso: token unknown -line 1, char(66), mas não entendia, agora com sua explicação faz sentido, usei sua solução e funcionou perfeitamente, obrigado pela ajuda !

Valeu !


Responder Citar