![]() |
Problemas al ingresar datos
amigos:
Nuevamente acudo a ustedes para solicitar ayuda. Tengo un problema al escribir datos en la DB. Revisé las tablas y estoy seguro que no es problema de ellas. Debe ser un problema con la comunicación o permisos del delphi a la base de datos. Puedo realizar consultas, lo que significa que tengo conexión con ella. ¿Me pueden orientar? El error que me aparece es : General SQL error. [Oracle][ODBC][Ora]ORA-01722: número no válido Pensé que era un problema de tipo de dato mal ingresado, longitud u otra cosa, pero están bien... No sé que será Siempre agradecido DaRk |
Seguramente estas comparando un campo o valor numérico con un varchar o algún tipo de dato diferente.
¿Porqué no nos pasas la consulta que te produce el error? |
La cuestión está en que no es una consulta SQL directa, sino que es una modificación o ingreso que se realiza en un componente TEdit sacado haciendo doble click en la tabla y seleccionando las columnas. Son esos componentes que se ponen en los forms directamente del componente TTable. No se que ocurre.....
|
¿La tabla no tiene ningún Trigger?
¿Estás usando un TUpdateSQL?' ¿Utilizas campos persistentes? (Pueden estar desactualizados) |
La verdad es que no estoy familiarizado con esos componentes... Si pudieras guiarme un poco te lo agradecería.
Personalmente es primera vez que tengo contacto con Delphi aplicado a Oracle, y no onozco todo lo que tiene relacion con eso. Yo solo he usado TTable, TQuery, TDataBase, TDataSource y TDBGrid. Te agradezco la ayuda... |
Ok.. si te animas a enviarme un script para crear tu tabla, y los fuentes de ese Form, yo lo veo y te digo....
Saludos! |
Te envío las características de la tabla...
CREATE TABLE RAMOS_MALLA (RAMO_MALLA VARCHAR2(7), NOM_RAMO VARCHAR2(50) NOT NULL, CARRERA1 NUMBER(3) NOT NULL, CARRERA2 NUMBER(3) NOT NULL, SEMESTRE NUMBER(1) NOT NULL, CREDITOS NUMBER(1) NOT NULL, P_REQTO1 VARCHAR2(7), P_REQTO2 VARCHAR2(7), P_REQTO3 VARCHAR2(7), CONSTRAINT PK_RAMO_MALLA PRIMARY KEY (RAMO_MALLA), CONSTRAINT FK_CARRERA_1 FOREIGN KEY (CARRERA1) REFERENCES CARRERA(CARRERA), CONSTRAINT FK_CARRERA_2 FOREIGN KEY (CARRERA2) REFERENCES CARRERA(CARRERA)); :confused: El código fuente del programa no te lo puedo enviar, porque trabaja con multiples forms y y los DataSource se refieren a tablas contenidas en otros forms... Te sirve de algo??? Podrías asesorarme con lo de las Actualizaciones SQL y eso que escribiste antes??? |
Ok... pasame solo el código del Form que tienes el DataSet.
|
He probado esto, y funciona perfectamente
Unit1.pas Código:
unit Unit1; Unit1.dfm Código:
|
Sabes que estoy usando lo que me enviaste, pero igual me envia un error.... el mismo... para poder modificar o ingresar los datos. No tengo idea que está pasando....
La propiedad Active de TTable debe estar en true para poder modificar ¿verdad? :( |
Si, pero tu no tienes ese problema, ya que el error que informaste es un ORA-01722, que es un error del servidor, por lo tanto estas conectado.
Repito una Pregunta: ¿Tienes Triggers en la tabla? Agrego: ¿Alguna Constraint del tipo Check? |
La tabla está definida como te lo escribí anteriormente. Los unicos constraint son las llaves primarias y foraneas. Acerca de triggers, no se... Todas las tablas están definidas tan simples como la que te presenté..
|
Te puedo recomendar utilizar estas consultas, para ver si tienes un trigger/check:
Código:
SELECT * Código:
|
Uso Delphi 6 y Oracle 9i
los triggers me devolvieron: ninguna fila seleccionada Los constriants: OWNER CONSTRAINT_NAME C ------------------------------ ------------------------------ - TABLE_NAME ------------------------------ SEARCH_CONDITION -------------------------------------------------------------------------------- R_OWNER R_CONSTRAINT_NAME DELETE_RU STATUS ------------------------------ ------------------------------ --------- -------- DEFERRABLE DEFERRED VALIDATED GENERATED BAD RELY LAST_CHA -------------- --------- ------------- -------------- --- ---- -------- INDEX_OWNER INDEX_NAME INVALID ------------------------------ ------------------------------ ------- VIEW_RELATED -------------- ADMINISTRADOR SYS_C002747 C RAMOS_MALLA "NOM_RAMO" IS NOT NULL NOT DEFERRABLE IMMEDIATE VALIDATED GENERATED NAME 05/06/03 ADMINISTRADOR SYS_C002748 C RAMOS_MALLA "CARRERA1" IS NOT NULL NOT DEFERRABLE IMMEDIATE VALIDATED GENERATED NAME 05/06/03 ADMINISTRADOR SYS_C002750 C RAMOS_MALLA "SEMESTRE" IS NOT NULL NOT DEFERRABLE IMMEDIATE VALIDATED GENERATED NAME 05/06/03 ADMINISTRADOR SYS_C002751 C RAMOS_MALLA "CREDITOS" IS NOT NULL NOT DEFERRABLE IMMEDIATE VALIDATED GENERATED NAME 05/06/03 |
Ok... Acabo de probar el código que te envié anteriormente en Delphi 6, y funciona bárbaro.
Ahora, estas seguro que el error se produce al guardar los datos, probaste en un EXE nuevo sin nada extra el código que te envié? |
Debo cambiarle el alias name al TDataBase.
Le pondré el nombre del alias que uso... Le pondré el user name y el password... Contruiré el poyecto... y.... El mismo error.... WAAAAAA!!!!!!! :( Solo modifiqué un valor... Ojo que me pasó cuando modifiqué el valor de creditos (cambié 6 por 7) pero cuando edité el valor del ramo no hizo problema.... (Haré una subrutina de suicidio :mad: ) |
Y porque no das un vistazo con el SQL Explorer para ver que sentencias está generando. Quizas hay algún lio con el tipo de datos que el bde interpreta de tu estructura.
Como consejo, si pensas hacer sistemas exclusivos para oracle, será mejor que busques otros componentes de acceso nativo (ncOCI8 por ejemplo), pues suele ir mucho mejor y no hay esta serie de complicaciones del BDE, que parece que fue "chapuseado" para soportar Oracle. Hasta luego. ;) |
Por el momento cambiaré a generar SQL por lineas de código.
Bajaré el ncOCI8 para analizarlo.... Muchas gracias.... |
Amigos:
Me acabo de percatar de una cosa.... Los datos que no me permiten ser modificados son lo numéricos, los Varchar lo hacen sin problemas, pero el error aparece cuando lo hago con datos numéricos... Sigo estudiando el problema. ¿Se les ocurre que puede ser? |
Ya:
El problema está localizado... eso creo... Con tipos de datos number no tengo problema, solo si se definen como NUMBER(Nº)... En: Tabla.FieldDefs tengo como tipo Float, pero solo lo acepta para NUMBER y no NUMBER(Nº)... ¿Hay que definirlo como Integer u otro???? |
La franja horaria es GMT +2. Ahora son las 17:42:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi