Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Extraccion valores MySQL (https://www.clubdelphi.com/foros/showthread.php?t=968)

vinny 27-05-2003 11:33:31

Extraccion valores MySQL
 
Hola de nuevo,

No se si estas preguntas deberian ubicarse mejor en otro grupo del foro, en tal caso, avisarme.

Realizado un SELECT de varios campos procedo a hacer comparaciones con valores de los campos para hacer unas tareas u otras.

Algunos de los campos extraidos no tiene valor (son NULL), entonces a la hora de hacer una comparación con dichos campos, la aplicación aborta dandome un error de "Access violation at address... Read of address 00000000".

La comparacion es:

if (Row[Voz3]='*') AND (cantado = false) then

donde el valor del campo Voz3 es NULL

Entonces intuyo que el problema se debe al comparar un null con cualquier valor, ya que las comparaciones anteriores no fallan y los campos tienen valor.

Una posible solución que se me ocurre es no admitir valores NULL en la base de datos y utilizar algun comodin como NULL, pero no me parece muy elegante.

Cómo se puede solventar dicha controversia?

Gracias,
Vicente

__cadetill 27-05-2003 11:52:53

prueba con..

if not Row.FieldByName('Voz30').IsNull and/or .....

Espero te sirva

vinny 27-05-2003 12:19:12

De momento no me ha solucionado el problema, la sintaxis no me la reconoce y como tampoco he tocado antes Delphi, poco puedo hacer por mis propios medios para intentar jugar con algo parecido o buscar funciones similares.

Sigo vendido ;)

vinny 27-05-2003 12:25:26

1 Archivos Adjunto(s)
Os adjunto el codigo tal y como lo tengo, asi podrá ser más facil a quien pueda echarme una mano encontrar como puedo reordenar codigo o que funciones puedo utilizar tal y como tengo definidas las variables.

Bacterion 27-05-2003 13:58:02

Es que estás usando "algo" que seguramente va a bajo nivel
Row: PMYSQL_ROW;
(¿Api de MySQL?)
en vez de un dataset normal.
¿Por qué no pruebas a usar un SQLConnection (D6 o superior) con driver MySQL?
Así podras usar los TFields (y por lo tanto el FieldByName) y podrás preguntar si son NULL o no y hacer la comparación en este último caso.
Si te quedas con esas funciones, tendrás que mirar en la ayuda de las mismas o preguntar en el foro de MySQL

vinny 27-05-2003 14:00:20

Desconozco el uso de SQL Connection, como hacer conexiones, moverme por los datos, insertar filas...

roman 27-05-2003 16:41:46

Cita:

Posteado originalmente por vinny
La comparacion es:

if (Row[Voz3]='*') AND (cantado = false) then


La API de MySql devuelve punteros a nil para los valores null de manera que primero debes checar que Row[Voz3] no sea nil:

Código:

if (Row[Voz3] <> nil) and (Row[Voz3] = '*') and (Cantado = false) then
En general debes tener en cuenta que una estructura como PMYSQL_ROW es un arreglo de punteros PChar por lo que es recomendable traducir primero esos a strings (que es más natutral para Delphi) y de ahí al tipo de datos que requieras.

Un consejo: Es difícil empezar con Delphi y es difícil empezar con MySql pero es más difícil empezar con ambos a la vez. Quizá te convenga buscar las componentes ZEOS (busca en Google) para que puedas acceder fácilmente a MySql y preocuparte ahora más por Delphi.

// Saludos


La franja horaria es GMT +2. Ahora son las 19:09:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi