FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problemas con pasos de parametros de Delphi a un SP
Saludos,
Primero describamos con qué estoy trabajando. SO: Win2000 Delphi 5 IBDatabase IBQuery IBDataSet IBTransaction Firebird 1.5 Ahora lo que debería de hacer en teoria: Desde delphi mando llamar a un SP que realiza una inserción de datos en la BD. Éste obtiene los parametros de entrada, los procesa y en base a una serie de operaciones actualiza las tablas correspondientes, sencillo ¿no?. El problema: El problema es que cuando envío datos tipo varchar, char o blob que contengan caracteres como ú, ó, é, entre otros, me marca un error de inserción. Cabe aclarar que a veces lo hace y otras no, además, en ocasiones al enviarme el error de todas formas ingresa los datos en la BD. Alguien tiene alguna idea de por que me pasa esto. Lo he probado en WIN NT 4.0 y no me ha marcado problema alguno hasta el momento pero pienso implantarlo en una maquina con Win XP. Todavía no lo he probado XP y no se si pudiesen venirse más problemas con ello. |
#2
|
||||
|
||||
Checa Esto....
En Primero lugar Revisa si tu Base de datos esta creada con el Charset ISO8859_1 y revisa que en tus campos de tipo Char y Varchar contengan lo mismo agregando el Collate a ES_ES.
Espero te haya ayudado. Saludos.... |
#3
|
|||
|
|||
PArece ser que el formato de la tabla es WIN1251 y el de los campos también, ¿podrían recomendarme algúna url en la que pueda consultar la diferencia entre estos formatos?
Gracias, lo revisaré. |
#4
|
|||
|
|||
Saludos.
He realizado el cambio de formato de la BD, y los campos de las tablas al Formato ISO_8851_1 y me sigue apareciendo el mismo error Cita:
Como les comentaba, cuando terminé de realizar la conversión me funcionó perfectamente la primera vez, pero al volver a ejecutarlo me mandó el error que les mencioné anteriormente. El procedimiento es el siguiente. Código:
CREATE PROCEDURE ALTA_PACIENTES ( FECHANAC CHAR (10) CHARACTER SET ISO8859_1, NOMBRE VARCHAR (25) CHARACTER SET ISO8859_1, APELLIDOS VARCHAR (40) CHARACTER SET ISO8859_1, EDAD INTEGER, SEXO CHAR (1) CHARACTER SET ISO8859_1, DIR VARCHAR (80) CHARACTER SET ISO8859_1, TEL VARCHAR (20) CHARACTER SET ISO8859_1, FAX VARCHAR (20) CHARACTER SET ISO8859_1, CORREO VARCHAR (100) CHARACTER SET ISO8859_1, FECHAALTA CHAR (10) CHARACTER SET ISO8859_1, DIAGNOSTICO VARCHAR (254) CHARACTER SET ISO8859_1, ANTECEDENTEEMB VARCHAR (128) CHARACTER SET ISO8859_1, ANTECEDENTEPAR VARCHAR (128) CHARACTER SET ISO8859_1, ALERGIAS VARCHAR (128) CHARACTER SET ISO8859_1, MOTIVO BLOB sub_type 0 segment size 80, NOMBREREF VARCHAR (25) CHARACTER SET ISO8859_1, APELLIDOSREF VARCHAR (40) CHARACTER SET ISO8859_1, SEXOREF CHAR (1) CHARACTER SET ISO8859_1, DIRREF VARCHAR (80) CHARACTER SET ISO8859_1, EMAILREF VARCHAR (100) CHARACTER SET ISO8859_1, TELREF VARCHAR (20) CHARACTER SET ISO8859_1, FAXREF VARCHAR (20) CHARACTER SET ISO8859_1) RETURNS ( RESULTADO VARCHAR (5) CHARACTER SET ISO8859_1) AS /*Variables de conversión de fecha*/ declare variable FECHA date; declare variable FECHA_ALTA date; /*Variables temporales de llave primaria*/ declare variable FECHA_TEMP date; declare variable NOMBRE_TEMP varchar(25); declare variable APELLIDOS_TEMP varchar(40); BEGIN /*Conversión del dato tipo char a fecha*/ FECHA = :FECHANAC; FECHA_ALTA = :FECHAALTA; /*Comparación de datos vacios*/ if ((:FechaNac <> '') and (:Nombre <> '') and (:Apellidos <> '') and (:Fechaalta <> '') and (:Diagnostico <> '') and (:NombreRef <> '') and (:ApellidosRef <> '')) then begin /*Busqueda de algun registro con la misma llave primaria, de encontrarse envía el mensaje al usuario para su corrección, de no ser así almacena todos los datos de las tablas, PACIENTES, EXPEDIENTES y REFERENCIAS.*/ select distinct FECHA_NAC_PAC, NOMBRE_PAC, APELLIDOS_PAC from pacientes where FECHA_NAC_PAC = :FECHA and NOMBRE_PAC = :NOMBRE and APELLIDOS_PAC = :APELLIDOS into :FECHA_TEMP, NOMBRE_TEMP, APELLIDOS_TEMP; /*Verificación de registro inexistente. Como la tabla EXPEDIENTES contiene un campo autoincremental de PK y la tabla REFERENCIAS no tiene PK, solo FK, no es necesario establecer una condición de validación de inserción.*/ if ((:FECHA_TEMP is null) and (:NOMBRE_TEMP is null) and (:APELLIDOS_TEMP is null)) then begin /*Almacenamiento en la tabla PACIENTES*/ insert into pacientes(FECHA_NAC_PAC, NOMBRE_PAC, APELLIDOS_PAC, EDAD_PAC, SEXO_PAC, DIR_PAC, TEL_PAC, FAX_PAC, EMAIL_PAC) values(:FECHA, :Nombre, :Apellidos, :Edad, :Sexo, :Dir, :Tel, :Fax, :Correo); /*Almacenamiento en la tabla EXPEDIENTES*/ insert into expedientes(FECHA_ALTA_PAC, FECHA_NAC_PAC, NOMBRE_PAC, APELLIDOS_PAC, DIAG_PAC, ANT_EMB_PAC, ANT_PARTO_PAC, ALERGIAS_PAC, MOTIVO_PAC) values(:FECHA_ALTA, :FECHA, :Nombre, :Apellidos, :Diagnostico, :AntecedenteEmb, :AntecedentePar, :Alergias, :Motivo); /*Almacenamiento en la Tabla REFERENCIA*/ insert into referencias(FECHA_NAC_PAC, NOMBRE_PAC, APELLIDOS_PAC, NOMBRE_REF, APELLIDOS_REF, SEXO_REF, DIR_REF, EMAIL_REF, TEL_REF, FAX_REF) values(:FECHA, :Nombre, :Apellidos, :NombreRef, :ApellidosRef, :SexoRef, :DirRef, :EMailRef, :TelRef, :FaxRef); RESULTADO = 'OK'; end else /*De encontrarse información le notifica al usuario*/ exception datos_existentes; end else begin RESULTADO = 'ERROR'; exception alta_de_datos; end END
Ya le he dado vuelas a esto una y otra vez y no encuentro el error, confio en que alguno de ustedes se percate de mi error y me lo haga saber. De antemano gracias. Última edición por cuburu fecha: 11-02-2006 a las 07:33:42. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problemas con codigo en delphi | Nelly | Varios | 3 | 07-11-2005 22:08:09 |
Problemas con el Instalshield con ejecutable de DELPHI 2005 | Ainbazter | Varios | 5 | 24-10-2005 10:01:06 |
problemas delphi 2005 .NET | maikelazo | Varios | 2 | 15-09-2005 16:39:21 |
Problemas con CORBA y Delphi 6 | FerPetrei | Providers | 0 | 30-01-2004 17:51:33 |
Problemas con Delphi 5 y windows ME | skullkid01 | Windows | 4 | 09-06-2003 19:22:09 |
|