Problema con resultsets vacíos

Alberto
02 de Agosto del 2005
Hola a todos.

Estoy haciendo una aplicación que trabaja sobre sql server 2000.

Bien, una de las partes es la gestión de los clientes, y ya que tengo que saber el id más alto de la tabla antes de meter un nuevo, mi problema es que cuando hago la consulta con la tabla vacía. no soy capaz de controlar ese resultado.

En resumen, ¿cómo se detecta un resultset vacío?

PD: He probado con rs.RecordCount, EOF, BOF , igualando a NULL, igualando a " " , etc

Cuando intento imprimir el campo que me interesa (y único que recoge la consulta), me da un error de VB diciendo "Uso impropio de NULL" o algo parecido.

Por cierto, si alguien sabe como configurar una clave primaria de una tabla de sql server para que sea autoincremental, le estará muy agradecido.

Saludos!!

HAYDEE
02 de Agosto del 2005
Supongo que la clave de cliente es numérica, si es asi puedes obtener el ID mas alto con el siguiente SQL:
SELECT MAX(CLAVE) FROM BASEDEDATOS/TABLACLIENTES

Y cuando empleas el recordset podrias hacer la validación:

IF NOT RSDESEADO.EOF THEN

dkdkdkdkdkdkdkdkdkdk
dddddddddddddddddddd
ELSE (en caso de que tengas varia la tabla)

MSGBOX "Error la tabla esta vacía", vbcritical (x si deseas enviar un archivo indicando que la tabla esta vacía)

ENDIF


Y para incrementar la clave, basta con que obtengas el máximo del ID y a este le incrementes el número que desees.



mvallejos
02 de Agosto del 2005
En la SQL, puedes hacer el tratamiento de nulos con la funcion Coalesce de SQL Server.

SELECT COALESCE(MAX(CLAVE) + 1,1) FROM TABLA

De este modo, cuando la tabla está vacia, MAX +1 retorna nulo, entonces Coalesce te retorna el siguente valo no nulo de la lista, es decir, 1

Saludos

Julio
02 de Agosto del 2005
La mejor forma de verificar si el recordset devuelve algo es con

If rs.BOF and rs.EOF then 'Es Vacio

Cuando BOF y EOF ambas son verdaderas el recordset es vacio.

fmastra
02 de Agosto del 2005
En SQL para que un campo sea incremental lo tenes que definir como IDENTITY(1,1)