Problema com SQL - Se alguem puder ajudar

10 respostas
E

Caros, criei um bd no sql server, criei as tabelas, procedures… e estava fazendo uma aplicação java para acessar esse banco, tive um problema na máquina e precisei formatar, qdo reinstalei o sql e restaurei o script as procedures não retornam mais valores, esse é o exemplo de uma das procedures que pararam de funcionar:

CREATE Procedure buscaLogin
@login varchar(8),
@senha varchar(8),
@tipo_login varchar(50) output
as
select @tipo_login = tipo From login where (login = @login) and (senha = @senha)

Alguém sabe o que pode estar acontecendo?

10 Respostas

Pedrosa

Existe dados nessa tabela login, faça o mesmo select que esta sendo passado na procedure e rode no Query Analizer e veja se retorna alguma coisa?

E

retorna sim, testei mais uma vez so pra garantir! :slight_smile:

tipo

estudante

(1 row(s) affected)

Pedrosa

Sua query esta meio estranha

select @tipo_login = tipo From login where (login = @login) and (senha = @senha)

não seria

select tipo From login where login = @login and senha = @senha and tipo =  @tipo_login
E

isso é um trabalho de BD, eu preciso que retorne para aplicação o tipo do usuário para determinar o que ele vai poder fazer. A regra do trabalho é que tudo seja feito via store procedure

Pedrosa

Tinha uma tabela semelhante aqui e do jeito que vc ta fazendo não retorna nada, testou do jeito que eu te falei?

Faça assim e teste novamente:

ALTER Procedure buscaLogin 
@login varchar(8), 
@senha varchar(8), 
@tipo_login varchar(50) output 
as 
select tipo From login where login = @login and senha = @senha and tipo =  @tipo_login
E

select tipo from login where login = ‘usuario’ and senha = ‘1234’

tipo

estudante

(1 row(s) affected)

Via query Analyser estou executando a procedure assim:
declare @tipo varchar(50)
exec buscaLogin ‘usuario’, ‘1234’, @tipo
print @tipo

Pedrosa

Sua query na procedure esta diferente da query mencionada, tente assim e veja o que acontece:

ALTER Procedure buscaLogin 
 @login varchar(8), 
 @senha varchar(8)
 as 
 select tipo From login where login = @login and senha = @senha

Chame a procedure assim

exec buscaLogim ‘login’,‘senha’

E

dessa forma:

tipo

(0 row(s) affected)

E

ele mostra o resultado mas na aplicação da esse erro: Output parameters have not yet been processed. Call getMoreResults().

private void ExecuteSQLSelect(String l, String s){
		try {
			String command;
			command = "{call buscaLogin(?,?,?)}";
			CallableStatement cs = con.prepareCall(command);
			cs.registerOutParameter(3, Types.VARCHAR);
	        cs.setString(1, l);
	        cs.setString(2,s);
	        cs.execute();
 			tipo = cs.getString(3);
 			login = l;
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
}
Pedrosa

Tente colocar isso:

de:

cs.execute();

para:

ResultSet rs = cs.execute(); 
rs.next();

Por convenção sempre inicie métodos com letra minuscula.

Criado 27 de novembro de 2006
Ultima resposta 28 de nov. de 2006
Respostas 10
Participantes 2