Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2014
alvarodelphi201 alvarodelphi201 is offline
Registrado
NULL
 
Registrado: dic 2014
Posts: 3
Poder: 0
alvarodelphi201 Va por buen camino
Unhappy problema al insertar un caracter especial en tablas dbf

Hola gente:

Debido a un requerimiento de un cliente actualmente me vi en la necesidad de crear un programa interfaz entre archivos xls y tablas DBF (visualfox 9) . Este cliente me pide que meta los datos de varios archivos xls a las tablas que tiene en foxpro (sistema antiiiguo, que no tienen planificado modernizar), con el iguiente plus... algunos campos estan encriptados.

Analizando el còdigo de su programador (me llevo semanas), encontre la fòrmula que uso este programador (que ya entrego el bote), que tiene horrible caracterìstica de poner como primer caracter del valor el caracter #0 (enter), bueno al principio no le di mucha importancia arme el programa y en el momento de las pruebas chas todo el trabajo arruinado, debido a que no puedo insertar ese bendito caracter (que fox raramente desde el còdigo propio si lo inserta) ya llevo varios dìas martillando el problema y no encuentro soluciòn ya que por ejemplo al querer meter el valor #0+'----' en las tablas dbf queda vacio completamente!!!!

Por favor denme unas luces sobre el tema, les adelanto que el cliente no quiere cambiar de sistema, asì que la soluciòn no va por ese lado (quisiera hacerle un sistema nuevo).

las caracterìsticas:
delphi 7 enterprise
conexion con ADO
el campo en la tabla dbf es un char(2), no puedo modificarlo porque es parte de otros mòdulos intocables (contabilidad).

les adjunto parte del còdigo que uso para insertar:

Código Delphi [-]
  with table2 do //tabla conectada a la tabla foxpro planilla
  begin
   // el n2topak es el que encripta

   vl_per := n2topak(StrToInt(mes+anio));

   Active := True;
   Insert;
   FieldByName('pl_anios').AsString:= GridContab.Cells[13,reg];
   FieldByName('pl_meses').AsString:= GridContab.Cells[14,reg];
   FieldByName('pl_antig').AsString:= GridContab.Cells[15,reg];
   FieldByName('pl_des1').AsString:= GridContab.Cells[18,reg];
   FieldByName('pl_des2').AsString:= GridContab.Cells[19,reg];
   FieldByName('pl_des3').AsString:= GridContab.Cells[20,reg];
   FieldByName('pl_des4').AsString:= GridContab.Cells[21,reg];
   FieldByName('pl_diast').AsString:= GridContab.Cells[22,reg];
   FieldByName('pl_f87').AsString:= vl_f87;

   // Este es el meollo del asunto el vl_per[0] tiene el còdigo #0 y el vl_per[1] otro caracter ascii que podrìa ser tambien #0

   FieldByName('pl_per').AsVariant:= vl_per[0]+vl_per[1];
   FieldByName('pl_sec').AsString:= vl_sec;
   Post;
   Active := False;

  end;
En sìntesis la estructura del dbf es intocable, ya que no quieren cambios.

Ayuda por favor!!!!

Última edición por ecfisa fecha: 12-12-2014 a las 06:51:24. Razón: Agregar etiquetas [DELPHI]
Responder Con Cita
  #2  
Antiguo 18-12-2014
alvarodelphi201 alvarodelphi201 is offline
Registrado
NULL
 
Registrado: dic 2014
Posts: 3
Poder: 0
alvarodelphi201 Va por buen camino
Actualizando el problema:

Despues de machacar encontré, que el procedimiento de encriptación en fox de este programador retorna el caracter nulo en el primer caracter del string, despues de una serie de pruebas verifiqué que ese caracter (#0) es el problema, ya que los restantes caracteres si los inserta.

Por tanto el procedimiento retorna en un string de 2 dìgitos en el primer caracter #0 y continua con otro tipo de caracter.

Alguien tiene idea de como meter este caracter nulo en un ¿campo?
Responder Con Cita
  #3  
Antiguo 18-12-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Un NULL es *infeccioso*. NULL con lo que sea da NULL (que es lo que creo que pasa en vl_per[0]+vl_per[1]).

Pero el *caracter* null es un *encoding*. Al igual que "enter" y "tab" (que se identifican por un #). Por lo tanto, debes es guardar el # o el *char* que representa el null, no el valor null (null <> char o # que representa null).
__________________
El malabarista.
Responder Con Cita
  #4  
Antiguo 18-12-2014
alvarodelphi201 alvarodelphi201 is offline
Registrado
NULL
 
Registrado: dic 2014
Posts: 3
Poder: 0
alvarodelphi201 Va por buen camino
Gracias por responder.

Cita:
Empezado por mamcx Ver Mensaje
Un NULL es *infeccioso*. NULL con lo que sea da NULL (que es lo que creo que pasa en vl_per[0]+vl_per[1]).

Pero el *caracter* null es un *encoding*. Al igual que "enter" y "tab" (que se identifican por un #). Por lo tanto, debes es guardar el # o el *char* que representa el null, no el valor null (null <> char o # que representa null).
ya intente (creo) hacerlo, tengo el procedimiento

Código Delphi [-]
function TForm1.codificar(n2 :Integer): string; 
var  L,H :Integer; 
begin  
  L:= n2 mod 256;  
  H:= (n2-L) div 256;   
  result:=CHR(H)+CHR(L);  
end;

Que es la copia del procedimiento del programador fox (traducida claro)
Como se puede ver la salida es un string el cual por ejemplo me devuelve en el debug #0'-'
si intento hacer un

Código Delphi [-]
FieldByName('pl_per').AsVariant:= vl_per;

no me inserta en ese campo nada (aparentemente) pero creo que me inserta el null (#0) y el resto de la cadena no lo cual lògicamente al hacer el desencriptado me devuelve valores incorrectos.

En el ejemplo #0'-' deberia devolverme al desencriptar 175 y me devuelve 8565.
probe con otros valores y solo tengo ese problema cuando el encriptador me retorna el #0 primero.

La verdad no se como hacer lo que indicas, si es que me puedes dar un ejemplo por favor te lo agradeceria.

Última edición por Casimiro Notevi fecha: 18-12-2014 a las 19:47:37.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema al insertar datos a tablas mysql elmago00 PHP 5 20-05-2014 22:32:41
Como Insertar Caracter FNC1 toni.vi Impresión 3 01-11-2013 16:59:15
Insertar carácter en string radenf Varios 7 17-09-2013 02:58:58
como insertar el caracter 251 DarkBlue Impresión 4 31-10-2011 03:32:20
Problemas al insertar cadenas que contienen el caracter ´ Isnel Firebird e Interbase 7 13-10-2006 18:58:12


La franja horaria es GMT +2. Ahora son las 10:39:56.


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
Copyright 1996-2007 Club Delphi