Problema con MySQL

Hola
estoy haciendo una aplicación de facturación de mysql y foxpro9, pero tengo un problema y es el siguiente:
cuando estoy facturando es 2 puntos distintos osea en 2 clientes, cuando el primer punto hace una factura y en seguida el segundo hace otra factura, mem manda un error que dice código de factura repetido. Osea que me esta grabando el mismo código de factura. Es como si después de haber guardado la primera factura, mysql no actualizara, cabe decir que tengo una rutina que actualiza el código de factura que lo incrementa después de haber guardado una factura.
espero que me puedan ayudar. Gracias...

1 respuesta

Respuesta
1
El error es tuyo, te recomiendo usar los campos AUTO_INCREMENT en mysql, son ¡Bastante seguros ya que el se encarga de los numeros y si quieres avisarle al usuario que numero de factura fue guardado simplemente usas la funcion last_insert() pero si no quieres eso el codigo que estas poniendo esta fallando, antes de guardar tus datos debes siempre de consultar inmediatamente el ultimonumero, algo estashaciendo mal, ¿puedes pegar tu codigo?
Bueno, primero gracias por tu respuesta.
Pero no me di a entender.
El problema es que cuando yo inserto por ejemplo un cliente en mi programa de fox y MySQL y luego voy a consultarlo en
una grilla donde aparecen todos los clientes que tengo registrados no me aparece el que registre. Para verlo tengo que desconectarme y volverme a conectar, voy a la grilla y si aparece. Lo que quiere decir que para ver los datos que he insertado o actualizado tengo que desconectarme y volverme a conectar y eso no me parece eficiente, para una aplicación de alta concurrencia, como podría solucionar este problema?
Noes necesario desconectarte ni conectarte, lo que pasa es que en modo C/S la grilla no se va actualizar por si sola, lo que debes hacer es volver a consultar los datos y volver a actualizar el GRID cada vez que haces algun cambio, es todo, unque no se que metodo usas te di esa solucion, otra cosa si trabajas con vistas remotas.
amigo, vuelvo y hago de nuevo el select y no aparece el nuevo regsitro. y no trabajo con vistas remotas.
Dame el codigoq que usas para actualizar tu grid, otra pregunta, ¿qué tipo de tablas usas?, ¿Innodb o myisam?
Con este codigo me conecto: quiero hacerte una acalracion no solo es con la grilla, si no con los updates o con los inserts o deletes que para ver los cambios hechos en mi bd tengo que desconectarne y volverme a conectar...
_USER='root'
_SEVER='localhost'
_PASS='1224'
PUBLIC cnx
cCadena="Driver=MySQL ODBC 3.51 Driver;Server="+_sever+";Port=3306;Uid="+_user+";Pwd="+_pass+";DB=coolesar" 
cnx = SQLSTRINGCONNECT(cCadena) 
IF cnx<>1 then
	MESSAGEBOX("No Se Pudo Establecer Una Conexion con La Base de Datos", 16,"Terminal")
ELSE
	SQLEXEC(cnx,'set autocommit=0')
ENDIF

y con esto cargo la grilla:
_csql="select S.sald_fact_prefijo,LF.lufact_Descripcion,S.sald_fact_codigo,C.clie_codigo,C.clie_nombre1,C.clie_nombre2,C.clie_apellido1,C.clie_apellido2,C.clie_razonso,S.sald_fact_fecha,S.sald_fact_fechaVenci,S.sald_fact_ValTotal"+;
                    " from saldo as S inner join lugar_facturacion AS LF ON(S.sald_fact_prefijo=LF.lufact_Prefijo)"+;
                    " INNER JOIN cliente as C on (S.sald_clie_codigo=C.clie_codigo)"+;
                    " where sald_fact_fecha BETWEEN '&fechainicial' AND '&fechafinal'"
                x=SQLEXEC(cnx,_csql,"temp_list_facturas")
             thisform.pageframe1.page1.cmdimprimir.Enabled= .T.
             thisform.pageframe1.page1.grid2.RecordSourceType= 1
                 thisform.pageframe1.page1.grid2.RecordSource="temp_list_facturas"
¿Y cómo sabes que la consulta tuvo exito?, debes verificar que sqlexec() te haya devuelto un valor positivo, ejemplo
if sqlexec(cnx,...) > 0
else
Endif
¿Estas seguro que funciona tu consulta?
si, la consulta funciona bien, el problemas es cuando en otro computador con el mismo programa insertan un registro de un cliente por poner un ejemplo, y luego yo lo quiero ver en mi pc con el mismo programa instalado, y no lo veo entones para verlo , que hago en estos momentos tengo una funcion que se llama actualizar pèro esta funcion lo que hace es conectarme y desconectarme y despues voy ala consulta y si veo el registro que mi compañero insertto en el otro pc.
La funcion actualizar es la indicada, pero no debes conectarte y desconectarte, esto bajara enormente el rendimiento de tu programa y tu server, una actualizacion deberia ser asi por ejemplo en un grid.
En el evento ini pones esto
this.recordsource = ' '
=sqlexec(xControl,"select codigo,nombre from clientes","clientes")
this.recordsource = "clientes"
Entonces cuando quieras actualizar el grid simplemente escribes
Thisform. Grid1.init
Y listo, ahora, la frecuencia en eque esto se ejecute depende de ti, hasta puedes poner un timer que lo ejecute cada 1 minuto o el tiempo que sea necesario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas