Ir al contenido


Foto

registro con valores nulos


  • Por favor identifícate para responder
8 respuestas en este tema

#1 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 06 diciembre 2010 - 12:53

Hola buenas noches,

Resulta que estoy leyendo los registros de una tabla en Access e insertándolos en otra, para esto estoy utilizando un SQLQuery1 leer los registros de la BD "A", y un SQLQuery2 para insertar los registros en la BD "B":



delphi
  1. SQLQuery2.Params.ParamByName('APTO').AsString:=SQLQuery1.FieldByName('APTO').AsString;   



Pero resulta que me ocasiona un error "NativeError 98" (conexion ODBC) cuando el valor de un campo no tiene ninguno, o sea esta null,

La tabla que estoy leyendo tiene 16 campos, de los cuales unos estan vacios (null),

Alguna pista para solucionar esto, o deberia verificar cada campo (16 en total)
para ver cual esta vacio..

Saludos


  • 0

#2 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 06 diciembre 2010 - 03:38

No sé porqué te da ese error.

Aunque si no te importa dejar las dos bases de datos igual (es decir, si la primera tiene un nulo, pones un nulo en la segunda), puedes hacer :

SQLQuery2.Params.ParamByName('APTO').Value := SQLQuery1.FieldByName('APTO').Value; 
  • 0

#3 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 06 diciembre 2010 - 09:15

Buenas,

Como bien dice Marc, ese error no debería de dártelo, a no ser que en la segunda tabla tengas especificado el campo como NOT NULL

Nos leemos

  • 0

#4 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 06 diciembre 2010 - 10:18

Gracias por las respuestas,

Efectivamente ya probe con la sugerencia de Marc, pero siempre
me muestra el mismo error, y la tabla destino es identica a la tabla origen.

Saludos
  • 0

#5 German

German

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 06 diciembre 2010 - 07:57

Me parece que el error viene de pensar en null como un valor. Null es un estado, no un valor, yo lo haria de la siguiente forma:



delphi
  1.   if(SQLQuery1.FieldByName('APTO').IsNull)then
  2.     SQLQuery2.FieldByName('APTO').Clear()
  3.   else
  4.     SQLQuery2.FieldByName('APTO').AsString := SQLQuery1.FieldByName('APTO').AsString;



Espero haber entendido bien y te sirva.

Saludos!!
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 06 diciembre 2010 - 09:32

Me parece que el error viene de pensar en null como un valor. Null es un estado, no un valor, .....................


Yo creo que null si es un valor, tan es así que puedes hacer esto:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   query1.SQL.Text := 'update clientes set direccion = :dire where direccion = "No asignada"';
  4.   query1.ParamByName('dire').DataType := ftString;
  5.   query1.ParamByName('dire').ParamType := ptInput;
  6.   query1.ParamByName('dire').Value := null;
  7.   query1.ExecSQL;
  8.   table1.Open;
  9. end;



Yo creo que por ahí tenemos un problema de tipo de parámetro o de tipo de dato.

Salud OS

  • 0

#7 German

German

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 07 diciembre 2010 - 04:19

Null es un valor para los lenguajes de programacion como pascal o c, no para las bases de datos sql.

En bases de datos Null, es la ausencia de valor, en los lenguajes de programacion, null, es un puntero, que no apunta, jejeje.

En este caso el null que usas es un variant, no es lo mismo que nil, lo cual tampoco recomiendo ya que el soporte de variant en freepascal todavia no funciona completamente ni totalmente en todas las plataformas. Es algo totalmente heredado de delphi + windows, tiene que ver con la tecnologia ole de microsoft.

Saludos.
  • 0

#8 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 07 diciembre 2010 - 05:06

Hola.

Para mi es claramente un bug del ODBC, ¿ no puedes encontrar una versión actualizada u otro driver ODBC ?.

Saludos.
  • 0

#9 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 07 diciembre 2010 - 12:00

Hola buenas tardes,

Mas creo también que es un BUG de la implementación del ODBC,
ya entre todas las pruebas, también lo hice como sugiere German,
igualmente siempre me muestra el mismo error,
en caso que todos los campos tengan un valor todo se realiza correctamente.


Saludos
  • 0




IP.Board spam blocked by CleanTalk.