Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Problemas al ingresar datos (https://www.clubdelphi.com/foros/showthread.php?t=2052)

DaRkBoY 07-07-2003 16:31:36

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

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
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


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:
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'

¿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????


La franja horaria es GMT +2. Ahora son las 09:14:35.

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