FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
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.....
|
#4
|
||||
|
||||
¿La tabla no tiene ningún Trigger?
¿Estás usando un TUpdateSQL?' ¿Utilizas campos persistentes? (Pueden estar desactualizados)
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
|||
|
|||
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... |
#6
|
||||
|
||||
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!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
|||
|
|||
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)); 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??? |
#8
|
||||
|
||||
Ok... pasame solo el código del Form que tienes el DataSet.
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#9
|
||||
|
||||
He probado esto, y funciona perfectamente
Unit1.pas Código:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, Db, StdCtrls, Mask, DBTables; type TForm1 = class(TForm) Database1: TDatabase; Table1: TTable; Table1RAMO_MALLA: TStringField; Table1NOM_RAMO: TStringField; Table1CARRERA1: TFloatField; Table1CARRERA2: TFloatField; Table1SEMESTRE: TFloatField; Table1CREDITOS: TFloatField; Table1P_REQTO1: TStringField; Table1P_REQTO2: TStringField; Table1P_REQTO3: TStringField; Label1: TLabel; DBEdit1: TDBEdit; DataSource1: TDataSource; Label2: TLabel; DBEdit2: TDBEdit; Label3: TLabel; DBEdit3: TDBEdit; Label4: TLabel; DBEdit4: TDBEdit; Label5: TLabel; DBEdit5: TDBEdit; Label6: TLabel; DBEdit6: TDBEdit; Label7: TLabel; DBEdit7: TDBEdit; Label8: TLabel; DBEdit8: TDBEdit; Label9: TLabel; DBEdit9: TDBEdit; DBNavigator1: TDBNavigator; private public end; var Form1: TForm1; implementation {$R *.DFM} end. Unit1.dfm Código:
object Form1: TForm1 Left = 207 Top = 107 Width = 696 Height = 480 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 80 Top = 8 Width = 73 Height = 13 Caption = 'RAMO_MALLA' FocusControl = DBEdit1 end object Label2: TLabel Left = 80 Top = 52 Width = 63 Height = 13 Caption = 'NOM_RAMO' FocusControl = DBEdit2 end object Label3: TLabel Left = 80 Top = 96 Width = 58 Height = 13 Caption = 'CARRERA1' FocusControl = DBEdit3 end object Label4: TLabel Left = 80 Top = 140 Width = 58 Height = 13 Caption = 'CARRERA2' FocusControl = DBEdit4 end object Label5: TLabel Left = 80 Top = 184 Width = 59 Height = 13 Caption = 'SEMESTRE' FocusControl = DBEdit5 end object Label6: TLabel Left = 80 Top = 228 Width = 55 Height = 13 Caption = 'CREDITOS' FocusControl = DBEdit6 end object Label7: TLabel Left = 80 Top = 272 Width = 57 Height = 13 Caption = 'P_REQTO1' FocusControl = DBEdit7 end object Label8: TLabel Left = 80 Top = 316 Width = 57 Height = 13 Caption = 'P_REQTO2' FocusControl = DBEdit8 end object Label9: TLabel Left = 80 Top = 360 Width = 57 Height = 13 Caption = 'P_REQTO3' FocusControl = DBEdit9 end object DBEdit1: TDBEdit Left = 80 Top = 24 Width = 46 Height = 21 DataField = 'RAMO_MALLA' DataSource = DataSource1 TabOrder = 0 end object DBEdit2: TDBEdit Left = 80 Top = 68 Width = 304 Height = 21 DataField = 'NOM_RAMO' DataSource = DataSource1 TabOrder = 1 end object DBEdit3: TDBEdit Left = 80 Top = 112 Width = 64 Height = 21 DataField = 'CARRERA1' DataSource = DataSource1 TabOrder = 2 end object DBEdit4: TDBEdit Left = 80 Top = 156 Width = 64 Height = 21 DataField = 'CARRERA2' DataSource = DataSource1 TabOrder = 3 end object DBEdit5: TDBEdit Left = 80 Top = 200 Width = 64 Height = 21 DataField = 'SEMESTRE' DataSource = DataSource1 TabOrder = 4 end object DBEdit6: TDBEdit Left = 80 Top = 244 Width = 64 Height = 21 DataField = 'CREDITOS' DataSource = DataSource1 TabOrder = 5 end object DBEdit7: TDBEdit Left = 80 Top = 288 Width = 46 Height = 21 DataField = 'P_REQTO1' DataSource = DataSource1 TabOrder = 6 end object DBEdit8: TDBEdit Left = 80 Top = 332 Width = 46 Height = 21 DataField = 'P_REQTO2' DataSource = DataSource1 TabOrder = 7 end object DBEdit9: TDBEdit Left = 80 Top = 376 Width = 46 Height = 21 DataField = 'P_REQTO3' DataSource = DataSource1 TabOrder = 8 end object DBNavigator1: TDBNavigator Left = 364 Top = 12 Width = 240 Height = 25 DataSource = DataSource1 TabOrder = 9 end object Database1: TDatabase AliasName = 'MIDSN' Connected = True DatabaseName = 'XXX' LoginPrompt = False Params.Strings = ( 'USER NAME=MIUSUARIO' 'PASSWORD=MIPASWORD') SessionName = 'Default' Left = 8 Top = 12 end object Table1: TTable Active = True DatabaseName = 'XXX' TableName = 'RAMOS_MALLA' Left = 36 Top = 12 object Table1RAMO_MALLA: TStringField FieldName = 'RAMO_MALLA' Required = True Size = 7 end object Table1NOM_RAMO: TStringField FieldName = 'NOM_RAMO' Required = True Size = 50 end object Table1CARRERA1: TFloatField FieldName = 'CARRERA1' Required = True end object Table1CARRERA2: TFloatField FieldName = 'CARRERA2' Required = True end object Table1SEMESTRE: TFloatField FieldName = 'SEMESTRE' Required = True end object Table1CREDITOS: TFloatField FieldName = 'CREDITOS' Required = True end object Table1P_REQTO1: TStringField FieldName = 'P_REQTO1' Size = 7 end object Table1P_REQTO2: TStringField FieldName = 'P_REQTO2' Size = 7 end object Table1P_REQTO3: TStringField FieldName = 'P_REQTO3' Size = 7 end end object DataSource1: TDataSource DataSet = Table1 Left = 156 Top = 164 end end
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#10
|
|||
|
|||
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? |
#11
|
||||
|
||||
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?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#12
|
|||
|
|||
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é..
|
#13
|
||||
|
||||
Te puedo recomendar utilizar estas consultas, para ver si tienes un trigger/check:
Código:
SELECT * FROM SYS.USER_TRIGGERS WHERE TABLE_NAME = 'RAMOS_MALLA' Código:
SELECT * FROM SYS.USER_CONSTRAINTS WHERE TABLE_NAME = 'RAMOS_MALLA' AND CONSTRAINT_TYPE = 'C'
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#14
|
|||
|
|||
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 |
#15
|
||||
|
||||
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é?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#16
|
|||
|
|||
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 ) |
#17
|
||||
|
||||
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.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#18
|
|||
|
|||
Por el momento cambiaré a generar SQL por lineas de código.
Bajaré el ncOCI8 para analizarlo.... Muchas gracias.... |
#19
|
|||
|
|||
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? |
#20
|
|||
|
|||
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???? |
|
|
|