Fórum Sub-select no DBExpress #280013
04/05/2005
0
Sql de exemplo:
SELECT * FROM TABELA WHERE CAMPO1 (SELECT CAMPO1 FROM TABELA2 WHERE ID= :ID)
Favor se alguem tiver uma solução ou outra técnica, agradeço.
H_luksevicius
Curtir tópico
+ 0Posts
04/05/2005
Vinicius2k
Qual o SGBD? Nunca tive este problema e acabo de testar a sua instrução com Firebird 1.5.2 e o erro não ocorre.
O Help do Delphi diz que :
O que dispensa o uso do Prepared := True;
Mas também diz:
SQLDataSet1.Params.CreateParam(ftString, ´PartNo´, ptInput); SQLDataSet1.ParamByName(´PartNo´).Value := Edit1.Text; SQLDataSet1.Prepared := False; SQLDataSet1.Close; SQLDataSet1.Open; // dataset is re-prepared when you open it
Talvez a adoção do método acima solucione seu problema, se for o caso.
PS: Provavelmente tenha sido um erro de digitação, mas a sua instrução de exemplo não está correta.
T+
Gostei + 0
04/05/2005
Rômulo Barros
SELECT * FROM TABELA WHERE CAMPO1 = (SELECT CAMPO1 FROM TABELA2 WHERE ID= :ID)
Ou
SELECT * FROM TABELA WHERE CAMPO1 IN (SELECT CAMPO1 FROM TABELA2 WHERE ID= :ID)
Gostei + 0
04/05/2005
H_luksevicius
Realmente a sintaxe que defini no exemplo falatava o ´iN´ como voce mencionou. Porém o problema persiste. Segue abaixo a mensagem de erro e o código utilizado.
O Banco de dados utilizado é o MSSQL Server
A mensagem é a seguinte:
Class EDataBaseError with message ´SQL State: 42000, SQL Error Code:0´
Não é possivel derivar informações do parâmetro de instruções SQL com consultas sub-select. Defina as informações do paramentro´.
O código utilizado é:
SQLDataSet1.Close;
SQLDataSet1.CommandText:=´SELECT * FROM ENTREGA WHERE ID_DOC IN(SELECT ID_DOC FROM ARQUIVOS WHERE ID_DOC=:ID)´;
SQLDataSet1.Params.CreateParam(ftInteger, ´ID´, ptInput);
SQLDataSet1.ParamByName(´ID´).Value:= 4;
SQLDataSet1.Prepared:= False;
SQLDataSet1.Close;
SQLDataSet1.Open;[/img]
Gostei + 0
04/05/2005
Rômulo Barros
SQLDataSet1.Close; SQLDataSet1.Params.Clear; SQLDataSet1.CommandText:=´SELECT * FROM ENTREGA WHERE ID_DOC IN(SELECT ID_DOC FROM ARQUIVOS WHERE ID_DOC=:ID)´; SQLDataSet1.ParamByName(´ID´).AsString := ´4´; SQLDataSet1.Open();
Gostei + 0
04/05/2005
Vinicius2k
Ao vc informar o SGBD, consegui simular o erro. Como ainda não havia passado por este problema, estou tentando/buscando a solução.
Verifique se não existe uma outra solução em relação à instrução SQL. Desconfio que esta seja uma limitação do MS-SQL e/ou OLEDB.
T+
Gostei + 0
04/05/2005
Vinicius2k
Como eu suspeitava, eis a resposta: http://support.microsoft.com/kb/q235053/
Sinto muito, mas creio que vc terá que buscar uma solução que não utilize parametros na sub-select.
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)