Power Builder - Error al crear una clave externa (foreing Key)

 
Vista:

Error al crear una clave externa (foreing Key)

Publicado por Novato (24 intervenciones) el 03/11/2009 20:53:12
Hola, tengo una tabla que no me crea (foreing key), me sale este error:SQLSTATE 37000 (ODBC Driver) (Adaptive Server Anywhere) Syntax Error Near (End of line) on line 1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error al crear una clave externa (foreing Key)

Publicado por miguell (153 intervenciones) el 03/11/2009 23:03:03
hola,

¿ cómo y con qué sentencia / programa estás usando la clave y cuál es la definición de tu tabla?

miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error al crear una clave externa (foreing Key)

Publicado por Novato (24 intervenciones) el 04/11/2009 03:23:09
Hola miguel, cambie el windows y por ende el PB10.5 y ahi comenzo el problema con las db.De casualidad realice la transaccion con ODBC, creo que ahi esta el error.
muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error al crear una clave externa (foreing Key)

Publicado por miguell (153 intervenciones) el 04/11/2009 09:10:01
Hola,

puede ser que el odbc te de algun problema, pero si no me dices qué es lo que estás haciendo o mejor ¿cuál sentencia estás ejecutando? entonces te puedo ayudar muy dificilmente.

saludos
miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error al crear una clave externa (foreing Key)

Publicado por Novato (24 intervenciones) el 04/11/2009 20:35:37
Hola miguel, no le doy ninguna sentencia, quiero agregarle la clave foranea al campo y me tira eso.Por medio del wizard o menu
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error al crear una clave externa (foreing Key)

Publicado por miguell (153 intervenciones) el 04/11/2009 22:15:10
o sea, entiendo que estás en un 'database painter' estás viendo una tabla y debajo, le das con botón derecho del ratón sobre 'Foreign Key's' y dices:

'new foreign key'.

luego te tiene qeu salir a la derecha dos pestañas 'general' donde eliges el campo para que la clave externa es, y
'primary key', donde dices cual es la tabla maestra y su(s) columna(s) ??

Si luego allí haces con botón derecho 'save changes' te falla ??????

bueno no sé si una forma de averiguar puede ser lo siguiente:

antes de crear la clave externa (foreign key), vas al menú 'Design', 'Start log':

luego haces todo de nuevo hasta que te da el error.
Abajo en la pestaña 'activity log' verás lo que powerbuilder en realidad ha intentado ejecutar (al salvar la clave).
en mi caso por ejemplo:
me sale:

ALTER TABLE FILTRE_DOC ADD (CONSTRAINT fk_mi_clave_externa FOREIGN KEY (NUMINT_DOC ) REFERENCES ABM_PRUEBA ) ;

esa sentencia por cierto, la podrás ejecutar también desde la pestaña 'isql session' para crear una clave externa.

mira cuál es el terminador de sql que tengas asignado tambien en el painter:
vas a 'Design', 'options' y se te abrirá la ventanita database preferences.

allí mira en la pestaña primera 'General' cuál es el carácter especificado bajo 'SQL terminator Character'. Debería ser normalmente una punto y como ( ; ) pero a veces la gente lo varian.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error al crear una clave externa (foreing Key)

Publicado por Novato (24 intervenciones) el 04/11/2009 23:07:31
Hola miguel, era el ODBC tenia un error...ya funciona.

Una consulta:
la tabla
CP varchar(4) tiene clave foranea.
LOCAL varchar(25)

en la ventana tengo 2 SingleLineEdit
1-cp_e
2-local_e

como hago para enlazar cp_e con CP(tabla). no se si me explico
Lo que quiero hacer es introducir en 'cp_e el' codigopostal, y en 'local_e' tiene que aparecer la localidad. En forma automatica.
me explico ?
ok gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error al crear una clave externa (foreing Key)

Publicado por miguell (153 intervenciones) el 05/11/2009 05:38:48
a tabla
CP varchar(4) tiene clave foranea.
LOCAL varchar(25)

en la ventana tengo 2 SingleLineEdit
1-cp_e
2-local_e

Hola N.

primero voy a ser pesado con consejos:
Consejo: es mejor nombrar los single lineEdits "sle_cp_e" y "sle_local_e" en vez de respectivamente "cp_e" y "local_e", así cuando ves algún código, ya sabes inmediatamente que se trata de un singleLineEdit y no de un dw, boton, multi-lineEdit, etc.), al empezar con "sle_" ...

Consejo: no es buena costumbre de hacer todo con sle's o montón de controles en una ventana cuando lo puedes solucionar usando datawindows.
Entiendo que ahora no te quieres complicar, pero tenlo en cuenta. Los datawindows te evitan tener muchos trozos de SQL en medio del código, optimizan la comunicación con la base de datos, carga más rápido un control dw con 10 columnas que 10 sle's en una ventana, etc. etc.
(si quieres me mandas tu pbl por correo y te digo cómo haría yo lo mismo usando datawindows, [email protected]).

Bueno a lo que te interesaba saber:
------------------------------------------------

como hago para enlazar cp_e con CP(tabla). no se si me explico
Lo que quiero hacer es introducir en 'cp_e el' codigopostal, y en 'local_e' tiene que aparecer la localidad.

"En forma automatica." lo tendrás que codificar en el evento "modified" del sle_cp_e (aunque hay más posibilidades). Este se dispara cuando por ejemplo el usuario pulsa el tab o intro o pincha con el ratón en otro control que esté habilitado:

//--------- evento modified del sle_cpe_e: código inicio:
string ls_codigo, ls_local

ls_codigo = this.text
if isnull(ls_codigo) then
ls_codigo = ''
end if

if ls_codigo = '' then
// limpiar el contenido del sle_local_e por haber ejecutado este código ya anteriormente para otro código postal
sle_local_e.text = ''
return
end if

// hacer el select de la base de datos
select local
into :ls_local
from tabla
where cp = :ls_codigo;

// acustumbrate de comprobar siempre si todo SQL vaya bien, te ahorrarás mucho dolor de cabeza
if sqlca.sqlcode = 100 then // entonces no existe el código en la tabla
messagebox('Información', 'El código postal introducido no existe en la base de datos.')
elseif sqlca.sqlcode < 0 then
messagebox('Error de Base de Datos', "Occurió un error de BD: " + sqlca.sqlerrtext)
end if

// pues hemos llegado aquí todo ha ido bien: visual el Local recuperado de la tabla.
sle_local_e.text = ls_local
// ------ fin código evento modified del sle_cp_e

have fun,
Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar