Ingresar datos de fecha a la bd desde power builder

Tengo que ingresar datos de tipo fecha no me permite con la sintaxis que me dist la vez pasada espero tu respuesta ijalal me puedas ayudar es para otra tabla pues me sale este error database transaction information not avariable call set trans or set transobject function

1 Respuesta

Respuesta
1
Tienes que fijarte que tipo de dato es la fecha, hay algunos que la fecha lo definen de tipo char, varchar o datetime en la base de datos, entonces de acuerdo a eso tienes que declarar variables para la fecha y lo puedas ingresar al datawindow y grabarlo a la base de datos, ojo que no se te olvide el formato de la fecha, algunos lo define solo la fecha y otros la fecha más la hora.
*Si has definido en la base de datos las fecha de tipo date o datetime entonces declara variables de este tipo en powerbuilder, porque los datawindow aceptan los tipos de datos definidos en la base de datos.
*Si no te resolviste el problema enviame el codigo que utilizas y el tipo de datos que es la fecha.
ola wueno  esta en date pero aprate hay oro problemita
uhm tengo k poner un numeor de mantenimiento y ese numero de mantenimiento es la primary key y kiero k se autogenere un codigo k nose aya repetido el codigo esta en double
la sintaxis k estoy usando esla misma k me diste pero nos eocmo hacerlo pues
if  dw_1.update()=1 then
    commit;
else
    rollback;
    messagebox('Error', 'Hubo problemas al actualizar la base de datos')
end if
aver te dejo el nombre de la tabla pues con sus campo la trbla se llama mant1
nro_man/ placa/ marca/fecha/kilometro
como te digo el numero de mant que se autogenere la placa he echo un enlace de una tabla placa y me muestra las ´placas no hay problema ahí la marc a quisiera que una vez que pionga la placa me muestre sla marca auomaticamente y la fecha pues seria nueva y el kilometraje también pues espero me puedas ayudar no se si me puedas hacer una asesoría mediante una asesoría remota con el programa teamwiener y así puedas ver y ayudarme
en el sistema que estoy haciendo es la primer avez que hago un sistema espero me puedas ayudar
amigo gracias de antemano
1. Para autogenerar un numero que en este caso es tu clave primary y es de tipo double entonces haríamos:
//Evento clicked() del boton Grabar o Guardar el registro
if messagebox("Confirme","¿Seguro de Grabar el Registro?",Question!,YesNo!)=1 then
/***************************************************/
double ldo_max 
/*Hacemos una consulta a la tabla mant1 para obtener el maximo codigo*/
select max(nro_man) into :ldo_max from mant1;
/*Incrementamos el codigo a una unidad en forma correlativo*/
if isnull(ldo_max) or ldo_max=0 then
     /*si la tabla esta vacia entonces el codigo lo ponemos a uno*/
     ldo_max=1
else    
     /*si la tabla contiene un codigo entonces lo incrementamos para asignarle al campo*/
     ldo_max=ldo_max+1
end if
/*insertamos el codigo incrementado al campo respectivo en el datawindow*/
dw_1.setitem(dw_1.getrow(),"nro_man",ldo_max)
/***************************************************/
/*Actualizamos y Grabamos el registro en el datawindow y la base de datos*/
if dw_1.update()<>-1 then
     commit Using sqlca;
else
     rollback Using sqlca;
end if
dw_rarchivo.setfocus()
end if
2. Para insertar la fecha al campo de tu datawindow haríamos de la siguiente manera:
//Evento clicked() del boton Nuevo o Insertar para agregar un nuevo registro en blanco
long ll_fila
dw_1.reset( ) limpiamos el datawindow
ll_fila=dw_1.insertrow(0) //obtenemos la fila donde se insertara los datos
dw_1.scrolltorow(ll_fila)
dw_1.setcolumn(2) //ponemos en cursor en el campo 2 o "placa"
dw_1.setrow(dw_1.getrow())
dw_1.modify("DataWindow.ReadOnly=False")//modificamos el datawindow para escritura
dw_1.setfocus() //enfocamos al datawindow
/*insertamos la fecha actual al campo "fecha"*/
dw_1.object.fecha.current[ll_fila]=date(today())
/********************/
/********************/
Eso es todo, ojala resuelva tu inquietud.
ola  amigo  en esta parte me muestra error
if dw_1.update()<>-1 then
     commit Using sqlca;
else
     rollback Using sqlca;
end if
dw_1.setfocus()
error database c0088:sqlstate=3700 .......................... error near if espero me ayudes
el error se pone en el commit  usuing sqlca
espeor me puedas ayudar
xacias d eantemando
La fecha ya ingresa lo que no puedo es es genrear lo autocodigos espero puedas hacer eso
Ayudarme
Al momento de ingreesar un nuevo amntenimiento se tiene que ver el código o el nro_mant por que en mi data windows no se ve el dta windows es fre form como me habais dicho que lo haga espero me ayudde sxacias ya te explique el problema en la anterior aclaacion ayuda por favor
1. El código que te puse para autogenerar el numero lo tienes que poner en el botón llamado "nuevo mantenimiento" o algo parecido para ingresar un nuevo registro y no en el botón grabar o guardar, es decir lo harías así:
//Este código va en el evento clicked() del botón nuevo mantenimiento
/***************************************************/
long ll_nuevafila
double ldo_max 
dw_1.reset( ) //limpiamos el datawindow
ll_nuevafila=dw_1.insertrow(0) //insertamos una nueva fila y obtengo su numero
dw_1.scrolltorow(ll_nuevafila)
dw_1.setcolumn(2) //ponemos el cursor en el campo placa o campo 2
dw_1.setrow(dw_1.getrow()) //establecemos la fila actual
dw_1.setfocus() //enfocamos al datawindow
dw_1.modify("dataWindow.readonly=no") //ponemos el datawindo para escritura
/*Hacemos una consulta a la tabla mant1 para obtener el maximo codigo*/
select max(nro_man) into :ldo_max from mant1;
/*Incrementamos el codigo a una unidad en forma correlativo*/
if isnull(ldo_max) or ldo_max=0 then
     /*si la tabla esta vacia entonces el codigo lo ponemos a uno*/
     ldo_max=1
else    
     /*si la tabla contiene un codigo entonces lo incrementamos para asignarle al campo*/
     ldo_max=ldo_max+1
end if
/*insertamos el codigo incrementado al campo respectivo en el datawindow*/
dw_1.setitem(ll_nuevafila,"nro_man",ldo_max)
/***************************************************/
Cuando hacemos click sobre el botón o sobre algún menu llamado nuevo mantenimiento, entonces nos debe limpiar el datawindow y aparecer el numero automáticamente autogenerado.
REVISA BIEN EL CODIGO.
2. si en la linea:
if dw_1.update()<>-1 then
     commit Using sqlca;
else
     rollback Using sqlca;
end if
Sale error puede ser:
a. Porque al grabar el registro el campo "nro_man" este vacío, y como es la clave primaria entonces genera este error.
b. Porque estas usando una variable de transacción distinta al de SQLCA:
commit using sqlca; --> debes cambiar por commit using [variable_que_uso];
Suerte.
ola wueno tengo esta sintaxis en el power 11.5
me corre normal pero en el 10 nose por k no es del autocodigo aver si me puedes dar una correccion
int nmant,nreg
nmant=dw_1.getitemnumber(dw_1.rowcount(),"nro_mante")+1
w1_4registro.title("nmant")
nreg=dw_1.insertrow(0)
dw_1.scrolltorow(nreg)
dw_1.SetItem(nreg,  "nro_mante", nmant)
dw_1.setfocus()
Me sale error en la 3line del w1_4registro of nmat algo así pero bueno quiero que te fijes si esta bien esta en un cb_1 nuevo ojal me puedas ayudar pormeto cualquier sea la respuesta puntuar ayuda me por favor o dime cual puede ser el problema
sorry era esta la sintaxis
int nmant,nreg
nmant=dw_1.getitemnumber(dw_1.rowcount(),"nro_mante")+1
w1_4registro.title=string(nmant)
nreg=dw_1.insertrow(0)
dw_1.scrolltorow(nreg)
dw_1.SetItem(nreg,  "nro_mante", nmant)
dw_1.setfocus()
Que me corre con el 11.5 y no con el 10
Ayuda por favor
Prueba la siguiente observación: la variable "nmant" es de tipo int y el titulo es de tipo string, así que convierte esta variable a string y luego asígnale al window.
w1_4registro. Title(string(nmant))
Mira no me sale error desde el comienzo
int nmant,nreg
nmant=dw_1.getitemnumber(dw_1.rowcount(),"nro_mante")+1
w1_4registro.title=(string(nmant)
nreg=dw_1.insertrow(0)
dw_1.scrolltorow(nreg)
dw_1.SetItem(nreg,  "nro_mante", nmant)
dw_1.setfocus()
Pero esta sintaxis me muestra error esta ejecutando cuando doy click ahí me sale el error no para ejecutarlo
le quito el igual y peor ya no m eejecuta ayuda o sabes a que puede ser doy click y me sale un mensaje de error aplcation terminat
error data windown row /column specificied at line 3 in clicked evento of object cb_1 of w1_4registro eso sale
espeor me apuedas ayudar
o i me dices cual es el motivo de ese eroor gracias
Para probar que solo la linea 3 esta el error, entonces esa linea coméntalo así:
//w1_4registro.title=(string(nmant)
Prueba ahora, si todo funciona correctamente, entonces el error es esa linea.
asi estaba y nada me sale el mismo error nos ek sera encuntro k esta bien pero k pasara k colera no poder resolver esto tanto tiempo
me sle el mismo error
int nmant,nreg
nmant=dw_1.getitemnumber(dw_1.rowcount(),"nro_mante")+1
w1_4registro.title=string(nmant)
nreg=dw_1.insertrow(0)
dw_1.scrolltorow(nreg)
dw_1.SetItem(nreg,  "nro_mante", nmant)
dw_1.setfocus()
Una vez más te la mando aver si hay otro error pero ese mismo error em sale
cuidat ojala me puedas ayudar
*Me parece que he descubierto el error:
*Cuando pruebo tu codigo estando el datawindow vacio sale error.
//Esta linea origina el error cuando el datawindow dw_1 esta vacio
nmant=dw_1.getitemnumber(dw_1.rowcount(),"nro_mante")+1
//dw_1.getitemnumber(dw_1.rowcount(),"nro_mante") <-- ESTE ES EL ERROR
*Caso contrario cuando el datawindow ya tiene algunos registros y aplico tu codigo todo funciona bien.
//Esta linea funciona perfectamente cuando el datawindow dw_1 tiene ya algunos registro.
nmant=dw_1.getitemnumber(dw_1.rowcount(),"nro_mante")+1
ENTONCES TE PONGO LA SIGUIENTE SOLUCION:
int nmant,nreg,totalreg
//Primero comprobamos si el datawindow tiene algun registro
totalreg=dw_carchivo.rowcount()
//Si tiene algun registro
if totalreg > 0 then
 nmant=dw_1.getitemnumber(dw_1.rowcount(),"nro_mante") + 1
else
//Sino entonces aginamos la unidad a la variable
 nmant=1
end if
w1_4registro.title=string(nmant)
nreg=dw_1.insertrow(0)
dw_1.scrolltorow(nreg)
dw_1.setitem(nreg,"nro_mante",nmant)
dw_1.setfocus()
/**************************/
Esto funciona pero puede tener algunas limitaciones, anteriormente te puse un código para un nuevo registro que es más eficiente, aunque más largo.
Suerte
Gracias por el tiempo pero resolví mi problem PERO IGUAL ME Has ECHO DE MUCHA AYUDA GRACIAS MUCHAS GRACIAS
int nmant,nreg
select max(nro_mant) into :nmant from mant1_cop;
nmant=nmant+1
w_4registro.title=string(nmant)
nreg=dw_1.insertrow(0)
dw_1.scrolltorow(nreg)
dw_1.SetItem(nreg,  "nro_mant", nmant)
dw_1.setfocus()

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas