PDA

Ver la Versión Completa : Problemas al ingresar datos


DaRkBoY
07-07-2003, 16:31:36
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

delphi.com.ar
07-07-2003, 16:59:41
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?

DaRkBoY
07-07-2003, 17:04:03
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.....

delphi.com.ar
07-07-2003, 17:19:09
¿La tabla no tiene ningún Trigger?
¿Estás usando un TUpdateSQL?'
¿Utilizas campos persistentes? (Pueden estar desactualizados)

DaRkBoY
07-07-2003, 17:39:16
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...

delphi.com.ar
07-07-2003, 17:42:48
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!

DaRkBoY
07-07-2003, 18:01:14
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???

delphi.com.ar
07-07-2003, 18:05:36
Ok... pasame solo el código del Form que tienes el DataSet.

delphi.com.ar
07-07-2003, 18:14:58
He probado esto, y funciona perfectamente

Unit1.pas
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

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

DaRkBoY
07-07-2003, 21:30:08
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?

:(

delphi.com.ar
07-07-2003, 21:36:45
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?

DaRkBoY
07-07-2003, 21:46:55
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é..

delphi.com.ar
07-07-2003, 22:19:59
Te puedo recomendar utilizar estas consultas, para ver si tienes un trigger/check:
SELECT *
FROM SYS.USER_TRIGGERS
WHERE TABLE_NAME = 'RAMOS_MALLA'


SELECT *
FROM SYS.USER_CONSTRAINTS
WHERE TABLE_NAME = 'RAMOS_MALLA'
AND CONSTRAINT_TYPE = 'C'
¿Qué versión de Delphi y Oracle utilizas?'

DaRkBoY
07-07-2003, 23:12:01
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

delphi.com.ar
07-07-2003, 23:25:36
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é?

DaRkBoY
07-07-2003, 23:46:31
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: )

jachguate
08-07-2003, 02:22:11
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.

;)

DaRkBoY
08-07-2003, 14:08:50
Por el momento cambiaré a generar SQL por lineas de código.

Bajaré el ncOCI8 para analizarlo....

Muchas gracias....

DaRkBoY
08-07-2003, 14:36:16
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?

DaRkBoY
08-07-2003, 20:11:32
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????

andiget
05-06-2007, 16:34:44
El problema es el caracter que usas para separar los valores decimales si es '.' o ','

prueba con la instruccion

DecimalSeparator := cDecimalSeparator;


donde cDecimalSeparator es el caracter de la base de datos para separar decimales, prueba con los dos y mira con cual te funciona