PREGUNTAS CONTESTADAS - Delphi

 Hay un total de 680 Preguntas.<<  >> 

    Pregunta:  45488 - RESPALDAR BASE DE DATOS PARADOX
Autor:  Deb Olvera
Hola.
Alguien me puede escribir como respaldar la base de datos de Paradox 7 al Disco Duro y al Disquet.

Gracias.
  Respuesta:  Erwin Perez
Te puedo recomendar (si asi le puedo llamar) algunas opciones:
1.- Respalda directamente los archivos con la funcion CopyFile (En esta estas sujeta a que el sistema operativo los copie correctamente, o a que tengas codigo con el que te asegures que asi es y que los datos estan integros, aunque tiene una ventaja, es muuucho mas rapido que los siguientes).

2.- Usa el componente TBatchMove para copiar tablas completas a tu respaldo.(Un poco parecido al anterior, pero aqui se encarga de la copia el BDE).

3.- Para cada tabla que tengas usa el metodo CreateTable del TTable para crear la tabla de respaldo, luego le copias informacion desde la tabla original. (este es muy util para los disquettes, pues te permite checar que tan lleno esta el disquette e ir marcando su secuencia en un archivo, una tabla, etc.)

Estas son algunas pistas, si tienes alguna duda puedes comentarla.

    Pregunta:  45649 - MODIFICAR EL FORMATO DE FECHA
Autor:  Ricardo Muñoz Muñoz
se puede cambiar el formato de la fecha del datetimepicker
la fecha la da en dd/mm/aaaa y yo la nacasito en aaaa/mm/dd para mandarlo aun query en el sql server
inicia;
dm.QGeneral.Close;
dm.QGeneral.SQL.Add('and der.descri = fecha {aaaa/mm/dd);
dm.QGeneral.Open;
end

gracias, ojala me puedan ayudar
  Respuesta:  Alejandro Bovone
Hola, fijate en las funciones de formato de fecha como: "datetostr()", hay otras que te permiten definir el formato a usar, pero no las recuerdo en este momento.

    Pregunta:  45682 - DUDA SOBRE CONCURRENCIA EN UNA BD PARADOX
Autor:  antonio sanchez
Estoy empezando a desarrollar un sistema de facturacion, cobranza, inventarios... estoy utilizando Delphi 7.0 y BDE-Paradox, y tengo una duda, mi pregunta es sobre la siguiente situación:

El sistema es en red, el detalle es, como puedo resolver el problema de concurrencia en los numeros de folio de la factura, es decir, los folios se van incrementando en uno, cada vez que se va a hacer una nueva factura, si un usuario empieza a hacer una factura le corresponde un número, por ejemplo el 10, si otro usuario en otra PC entra casi al mismo tiempo le tocará el folio 11, que pasa si el usuario de la factura 10 decide cancelar la elaboración de la factura? que pasará con el folio? deberé releer el folio para que la que era la numero 11 sea la número 10? existe una mejor manera de solucionar esto? claro, sin el uso de una BD Cliente/Servidor ni de transacciones.
  Respuesta:  Alejandro Bovone
A mi entender te conviene utilizar campos autoincrementables, si queres tener el control de la numeración te conviene obtener el número en el momento de la grabación del comprobante.

En el beforepost de la tabla coloca el código necesario para obtener un nuevo número de folio.

De todas formas te recomiendo que cambies a otro sistema de base de datos por ejemplo firebird, te vas a evitar un montón de problemas.

    Pregunta:  46043 - ERROR 8715 DEL BDE
Autor:  Roilo Giménez
(Could not Find Language Driver)
Ya estoy Exhausto de ver este Error en mi pantalla...(He intentado por todas las vias de resolverlo...)
Resulta que quiero trabajar en Delphi 7 con una tabla .DBF y su .CDI correspondiente.
Para ello uso un TTable. Primero le asigno la dirección de la base de datos y luego el nombre de la tabla. Cuando le doy true a la propiedad active, entonces surge el Error.
Lo Interesante, para mí, es que tengo otra tabla, también con su .CDI
a la que sí me puedo conectar con el mismo procedimiento.
Espero que te alla explicado bien mi problema. Dime qué tienes de esto por ahí. GRACIAS de antemanos.
  Respuesta:  Jorge Lopez
Hola, acabo de leer tu pregunta y creo tener una soluición, cuándo uses tablas "DBF" te recomiendo que la abras en EXCEL , una vez allí, checa que los formatos de los datos sean los correctos y las columnas hay que hacerlas del tamaño necesario para que no se corten los datos que ya tienes en tu BD.

Ahora sólo guarda el archivo de EXCEL cono DBF 4 y listo, vuelve a conectar el TABLE1 a la BD nueva y haz una prueba...

Saludos.

    Pregunta:  46125 - COLOR DEL TEXTO EN UN TREENODE
Autor:  Sonia Rodriguez
Hola, me gustaria saber si hay forma de cambiar el color del texto en un TreeNode dentro de un TreeView.
Gracias!!
  Respuesta:  Erwin Perez
Debes escribir en el evento OnCustomDrawItem el codigo del dibujado del texto, previamente cambiando el color en la propiedad Canvas.Font y restableciendolo al final.
ejemplo:

procedure TForm.TMyTreeViewCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
TheRect: TRect;
SaveColor: TColor;
begin
DefaultDraw:=False;
if DefaultDraw then Exit;
TheRect:=Node.DisplayRect(False);
SaveColor:=MyTreeView.Font.Color;
MyTreeView.Font.Color:=clBlue;
DrawText(TVSaldo.Canvas.Handle, PChar(Node.Text), Length(Node.Text), TheRect, DT_RIGHT);
MyTreeView.Font.Color:=SaveColor;
end;

    Pregunta:  46283 - COMO HACER UNA APLICACION PAR A CHATEAR EN RED LOCAL
Autor:  Rene Leandro Cruz Laguna
Quisiera saber como hacer un programa para chatear en una red local algo dificil verdad soy algo nobato en delphi pero me interesa saber.Sea lgo pero quiero aprender mas
  Respuesta:  Erwin Perez
Hay muchas opciones, pero las englobare primero en dos formas:
1.- Todos los clientes del chat se conectan a un servidor que recibe y envia los mensajes.
2.- Cada uno de los clientes se conecta directamente al cliente que desea enviarle el mensaje.

Por otro lado, para el envio de mensajes, debes considerar un transporte, te puedo mencionar varios:

*Cadenas de caracteres (Aqui debes diseñar un protocolo) con sockets.
*Comunicacion DCOM.
*Conexiones DCOM con TDCOMConnection
*Conexion DCOM a travez de TSocketConnection
etc. (Te menciono estos tres porque son en los que tengo mas experiencia).

Supongamos que eliges un servidor de despacho, entonces creas una aplicacion, le agregas un objeto TAutomationObject con las siguientes caracteristicas: Instancing: MultipleInstance, Threading Model: Single
y marcas "Generate Event support code", esto hara que puedas lanzar eventos.
Abres el Type Library(View/Type Library), y en la interfase das de alta un metodo para envio de mensaje, pej.: SendMsg y en parametros pones Usuario, Mensaje, etc. Luego en la interfaz de eventos creas un evento para notificar a los clientes del envio, pej. MessageSent, con los mismos parametros de SendMsg, ahora ya tenemos el esqueleto. Lo siguiente es codificar el metodo SendMsg:

TMyServerObject.SendMsg(Usuario, Mensaje: OleVariant);
var
i: Integer;
begin
for i:=0 to FConnections.Count - 1 do
(FConnections.Items[i] as IMyServerObjectEvents).MessageSent(Usuario, Mensaje)

//Esto dispara el evento MessageSent en los clientes pasando los parametros Usuario y Mensaje, los cuales puedes procesar para mostrar el mensaje, claro que tienes que tener una lista de todos los clientes que aqui llame FConnections, ya que cada conexion crea una instancia del servidor, asi que hay que mantener una lista externa. Tenia por ahi el codigo de una implementacion asi pero no lo encuentro, si necesitas esto mas a profundidad podria mandartelo despues.

end;

LADO CLIENTE

Para el cliente, primero importas el servidor en Project/Import Type Library, y eliges crear componente, eso crea un componente en la paleta de componentes con el nombre de tu servidor, lo colocas en tu cliente, este componente te permitira establecer la maquina donde reside (hay que especificar que es remoto) y codificar el evento (en el inspector de objetos) para que decida si el mensaje corresponde al usuario que este usando dicho cliente o no y con ello decide si muestra el mensaje.

Recepcion del mensaje
TMyForm.TMyMessageServer1OnMessageSent(Usuario, Mensaje: OleVariant);
begin
if Usuario = UsuarioActivo then
Memo1.Lines.Add(Mensaje)
end;

Para enviarlo
TMyForm.Button1Click(Sender: TObject);
begin
MyMessageServer1.SendMsg(UsuarioActivo, Memo2.Text);
end;

Espero te sea de ayuda para darte una idea, no es meramente toda la implementacion pero espero te sirva.

    Pregunta:  46359 - ERROR EN PARADOX 7 (TO MANY OPEN TABLE)
Autor:  Reynaldo Téllez Menocal
Hola, tengo una pequeña aplicación desarrollada en Delphi 7, la cual manipula tablas paradox 7, trabaja perfectamente, pero en ocaciones muestra el error de to many open file C:\xxxx\xxx\xxx.db, los registros agregados anteriormente se pierden al igual que cuando por una causa fortuita se reicia el ordenardor, el error de to many open table, lo da cuando la tabla se manipula constantemente o sea, se le agrega un registro se le hace el post y se le hace una consulta, estos metodos cuando se hacen más de una vez da el error, si no me exprexe correctamente o no se me entiente por favor hacermelo saber ok.

Saludos antemano.
  Respuesta:  Josue JImenez
Lo que debes hacer es abrir y cerar la tabla cada vez que agreges o consultes. Lo que si pasa que cuando se esten escribiendo datos en la tabla se reinicia el ordenador se puede corromper la base de datos. Y con lo que te comente en la primera parte tienes menor riesgo de que la tabla permanesca abierta.

No se si resolvi tu duda o la amplie mas!!!

    Pregunta:  46481 - PROTEGER UN TXT
Autor:  ALEXANDER LOPEZ
Hola:
Tengo una pregunta sencilla pero demasiado complicada de solucionar, a primera vista no creo que haya solucion pero de todas formas la hare....
Mi aplicacion tiene muchos y my buenos controles antipirateria, entre ellos esta la imposibilidad de modificar el nombre del adquiriente despues de instalarlo, pero por disposiciones legales debe generar archivos txt con informacion referente a ese adquiriente de la licencia y otra informacion de los calculos que se hacen en la aplicacion.
Existe una forma de proteger este archivo para que no sea modificado por ninguna aplicacion diferente a la mia y de esa forma le coloquen el nombre del "adquiriente" que quieran? Sin esto no tendria sentido todos los anteriores controles porque el que quiera puede trabajar pirata y a la hora de generar el txt lo modifica en la parte del adquiriente y LISTO.
AYUDA POR FAVOR GRACIAS
  Respuesta:  Jerry CCS
Una forma sería agregar al final del archivo txt un checksum de la data que contiene este archivo (o coloca ese checksum en el registro de windows), generado por el mismo programa o por el programa de instalación, cada vez que inicies la aplicación, lees el archivo txt, corroboras que el checksum sea el adecuado, generandolo nuevamente y comparandolo, además puedes incluir el numero de serie del disco duro, la versión del sistema operativo y algunas otras variables en ese checksum para hacerlo mas dificil de "generar". Si los checksum no coinciden, voìla, la aplicación se cierra, pero no lo hagas en la entrada, deja que el usuario trabaje algunos segundos ("n" segundos de manera aleatoria) y para que no parezca un "sistema de seguridad" en vez de cerrar la aplicación, genera una ventana de error (raise error) con un numero escogido por ti, así en caso de que surja alguna consulta tecnica, ya sabrás por donde vienen los tiros... a veces resulta mejor esperar algún tipo de operación del usuario, para iniciar la verificación, porque aparte de hacerlo "mas aleatorio", es mas dificil de localizar para crackearlo, mejor aun es hacerlo en varias partes del programa, siempre con rutinas de chequeo diferentes, no tiene sentido ejecutarlo en varias partes del programa si siempre llamas al mismo procedimiento de chequeo. Espero que sea de utilidad... suerte
  Respuesta:  Erwin Perez
Permiteme preguntarte: Necesitas que alguien ajeno a ti tenga acceso de modo controlado al archivo de texto?
Porque podrias encriptarlo para evitar que lo alteren, otra opcion es que le agreges al final del archivo una firma digital para que quien deba accesarlo de pueda constatar que no se ha modificado, creo que esto no soluciona es acceso al archivo, pero si previene que lo pasen por bueno, ademas podrias almacenar en un sitio "seguro" los datos y checar periodicamente la coherencia del archivo txt para regenerarlo si ha sido alterado, ten en cuenta que en este mundo nada es infalible ni impenetrable, pero si lo puedes hacer mas dificil. Es una sugerencia, espero te sirva.

    Pregunta:  46623 - GENERAR DISCOS DE INSTALACIÓN
Autor:  btos
necesito ayuda para poder instalar un programa que termine con mucho trabajo porque no se nada de delphi y que necesito instalar en otras maquinas, entonces mi pregunta. ¿como hago para crear los discos de instalacion de dicho programa?

de antemano muchas gracias a todos
  Respuesta:  Gamaliel Ramirez
Hola.. mira en Delphi conozco solo 2 instaladores, uno para delphi 2.0 y 3.0, pero apartir de la 4.0 trae consigo otro instaldor un poco mas complicado, asi que si puedes conseguir la primera version del InstallShell que viene con Delphi 2.0 y 3.0 te la recomiendo (es mas sencillo y rapido), ya que aunque hayas hecho un proyecto en Delphi 7.0 o superior este instalador crea el ejecutable y hasta le puedes meter un autorun al CD.
Cuidado con las B.D de tu proyecto ya que a la hora de estar creando el ejecutable te pide los alias, y si incluyes carpetas y acrhivos, hay una opcion para integrarlos en la creacion del ejecutable.
  Respuesta:  Remberto Gonzales C.
Mira, no se que version de Delphi utilizas, pero en la mayoria de las versiones viene incluido el InstallShield, que es un programa para realizar "Instaladores" de una aplicacion en Delphi (a la hora de instalar Delphi, tambien tiene una opcion que es el de Instalar InstallShield)

Basta Instalar y ejecutar, y el programa es intuitivo, no se dificil de aplicar, pues esta basado en menus y es sencillo darse cuenta que es y para que sirve cada opcion.

    Pregunta:  46723 - ?COMO AGREGO ELEMENTOS IMAGE DURANTE LA EJECUSION
Autor:  Michel Frias
Dios les Bendiga hermanos:
Necesito saber como puedo generar muchas veces el componente (image) durante la ejecucion del formulario.
Me refiero a esto para que me entiendan: image1, image2, image3, image4, image(n)... y que todos los elementos image que se van generando caigan en una coordenada determinada en el formulario.
Necesito que se genere muchas veces ese componente y que se vayan agregando al formulario mientras se crean automaticamente. Necesito aplicar esto para un programa que simula un proceso y necesito que cada vez que se genere un elemento (image), ponerle una imagen pequena.
ESPERO SU AYUDA
  Respuesta:  Erwin Perez
Podrias usar una rutina como la que sigue:

for i:=1 to n do begin
MyImage:=TImage.Create(ThePanel);
with MyImage do begin

Name:='Imagen'+IntToStr(i); // Aqui le asigno un nombre

Parent:=ThePanel; // Aqui supuse que el objeto donde se van a mostrar es un panel llamado ThePanel.

BoundsRect:=Rect(X, Y, X + Ancho, Y + Alto); // X y Y son la posicion donde deben quedar relativa a la esq. sup izq. del componente donde van a estar, y Ancho, Alto son el ancho y alto que definas para las imagenes.

Picture.Graphic.BitMap:=MiImagen; // aqui le asignas la imagen que deben mostrar, le asigne un mapa de bits como ejemplo.
end;
end;

|<  <<  53 54 55 56 57 58 59 60 61 62 63  >>  >|