Hay un total de 680 Preguntas. | << >> |
Pregunta: | 39265 - PROBLEMA CON EL INSTALL SHIELD DE DELPHI 6 |
Autor: | Jesús Morones |
Hola a todos, tengo una aplicación de base de datos creada con delphi 5 (tablas de paradox). Cambié mi aplicación a Delphi 6, pero al momento de crear el instalador me encontré con que había sufrido algunas modificaciones. Y no he logrado entender como configurar el BDE utilizando este nuevo install Shield. Intenté crear una conexión ODBC, pero no logro conectarme. Alguno sabe como se configura el BDE en el Install Shield incluido en Delphi 6? o alguna otra solución que me puedan ofrecer?
Muchas gracias >=) |
Respuesta: | Ana Gabriela Covarrubias |
Hola Jesus, en el paso 2, la tercera seccion (Objects/Merge Modules) encuentras el modulo "BDE_ENT" el cual es el bde. Cuando seleccionas este modulo te permite configurarlo, es decir, crear aliases, seleccionar los drivers que requerieres, etc.
Suerte! Ana Gabriela Covarrubias Sanchez Smartware |
Pregunta: | 39327 - COMO USAR UNA AYUDA CON FORMATO CHM CON DELPHI 5 |
Autor: | Reynaldo de Jesus Tellez Menocal |
Tengo la incognita de no saber como se usa un fichero de ayuda con extension Chm en delphi, normalmente uso Hlp, pero me gusto el ambiente de Html integrado en la ayuda, pero no se implementarlo |
Respuesta: | Miguel Lucero |
Reynaldo
Fijate en este truco sacado de trucomanía (http://www.q3.nu/trucomania) Por ejemplo, abrir un *.chm con el explorador web instalado por defecto Podemos hacerlo muy fácilmente mediante la funcion ShellExecute del Api. Por ejemplo, si queremos ver un fichero chm Añade 'ShellApi' en el uses de tu form, y ejecuta esto: ShellExecute(Handle,nil,PChar('nombre.chm'),'','',SW_SHOWNORMAL); donde nombre.chm es el nombre del archivo de ayuda a abrir. La función reconoce las extensiones definidas en el Explorer de Windows, y llama al programa correspondiente según la extensión del fichero. |
Pregunta: | 39431 - VALIDACION DE UNA LLAVE PRIMARIA |
Autor: | Jesus Mendez |
¿como puedo validar un campo con llave primaria para que no acepte una clave repetida? |
Respuesta: | Luis Felipe García Gutiérrez |
Es cierto, es el motor de BD quien debe validar que el dato ingresado (la llave) no se repita, eso se hace definiendo las llaves; pero desde delphi se tendría que ejecutar una consulta adicional (puede ser al salir del campo que quieres validar), la cual verifique sobre esa tabla y ese campo que no exista el dato que quieres insertar, de existir se generaría el mensaje de error correspondiente (mostrándole al usuario a que información está asociada); ésto te evitaría la definición de llaves en la BD, pero siempre será preferible realizar las adecuaciones sobre ésta por integridad y agilidad en la consulta y procesamiento de los datos. |
Respuesta: | Roberto Ortiz |
para k t sistema no acepte llaves repetidas, eso no es tarea de delphi, depende de tu Servidor de Datos, k es el kien tiene k hacer esa tarea, claro esta k tu BD debe estar bien integrada.
tu sistema solamente mandara el nuevo registro y es tu Servidor de Datos kien decide aceptar o rechazar la solicitud. |
Pregunta: | 39916 - COMO SABER SI UNA APLICACION YA ESTA ABIERTA CON DELPHI |
Autor: | David Silva |
Hola.
Mi pregunta se refiere para saber si una aplicación ya se encuentra abierta, esto es para que no puedan abrir dos veces una aplicación que esta desarrollada con Delphi 6. |
Respuesta: | Reynaldo Tellez Menocal |
Este truco lo saque del trucomania para Delphi, en la grupo aplicacion pruebalo a ver si te sirve, a mi me dio resultado.
Esto sirve para que no ejecuten tu programa más de una vez simultaneamente. Puede que quieras simplemente denegar la creación de la segunda instancia de tu aplicación, o puede que lo que quieras es que no sólo no se abra la segunda instancia, sino que se restaure la primera (que igual está minimizada, por ejemplo). Hay muchas maneras de hacer esto. En este truco he querido poner una que me ha llamado la atención por su sencillez. En Delphi 1 el detectar una instancia anterior era tan fácil como chequear la variable hPrevinst, pero en Delphi 32 bits esta variable ya no existe, así que tenemos que buscar otra manera de detectar otra copia de nuestra aplicación. Aqui la buscaremos con ayuda de FindWindow y un pequeño truco para simplificar la búsqueda: Meteremos este código en el código del proyecto, para lo cual has de habilitar la pestaña de ver código del projecto, que está en: View-Project Source program Project1; uses Forms, Windows, Messages, Unit1 in 'Unit1.pas' {Form1}; const CM_RESTORE = WM_USER + $1000; var RvHandle : hWnd; {$R *.RES} begin {Si existe otra instancia ya ejecutandose, la activamos} {If there's another instance already running, activate that one} RvHandle := FindWindow('Mi programa Delphi', NIL); if RvHandle > 0 then begin PostMessage(RvHandle, CM_RESTORE, 0, 0); Exit; end; {Sino, haz lo normal} {Else, do the normal stuff} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. En la declaración de la form, añadiremos este código, (la constante y las dos procedures que hay en la parte public) const CM_RESTORE = WM_USER + $1000; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure CreateParams(var Params: TCreateParams); override; procedure RestoreRequest(var message: TMessage); message CM_RESTORE; end; Y en la implementation de la form, pondremos el código de las dos procedures que hemos definido: procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.WinClassName := 'Mi programa Delphi'; end; procedure TForm1.RestoreRequest(var message: TMessage); begin if IsIconic(Application.Handle) = TRUE then Application.Restore else Application.BringToFront; end; El funcionamiento de todo esto es el siguiente: -Definimos un nuevo CreateParams para nuestra form, que lo que hace es asignar 'Mi programa Delphi' al WinClassName para luego poder buscar nuestra aplicación con mayor facilidad mediante FindWindow -Creamos una procedure de tratamiento de nuestro mensaje: CM_RESTORE, que servirá para decirle a la primera instancia de nuestra aplicación que queremos que 'resucite' -Y por ultimo, en el fuente del proyecto, buscamos una instancia previa de nuestra aplicación mediante FindWindow, y, si la encontramos, la enviamos nuestro propio mensaje CM_RESTORE para que resucite. Otro ejemplo, mediante un semáforo Pon esto en el OnCreate de tu form: procedure TMainForm.FormCreate(Sender: TObject); var Sem : THandle; begin Sem := CreateSemaphore(nil,0,1,'PROGRAM_NAME'); if ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then begin CloseHandle( Sem ); ShowMessage('This program is already running.'+ 'Este programa ya se está ejecutando...'); Halt; end; end; Otro ejemplo, mediante la unit TLHelp32 y el nombre del ejecutable (Enviado por Javier Pareja ([email protected])) Simplemente detectaremos si hay otro ejecutable ejecutándose que se llame igual que el nuestro. -Añade 'TLHelp32' en el uses de tu form -Añade esta función en el implementation de la form: function ProgramaAbiertoDosVeces:Boolean; var Datos :TProcessEntry32; {Estructura interna de datos de un proceso} hID :DWord; {identificador del proceso} Snap :Integer; NombreArchivo :String; {path del archivo original} Repetido :Boolean; {true si el programa se ha abierto dos veces} Handle1 :Hwnd; {thandle} Contador :Integer; {Contador de aperturas} begin Contador:=0; NombreArchivo:=Application.Exename; Repetido:=False; GetWindowThreadProcessId(Handle1,@hID); Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); try Datos.dwSize:=SizeOf(Datos); if(Process32First(Snap,Datos))then begin repeat if NombreArchivo=StrPas(Datos.szExeFile) then begin Inc(contador); if Contador>=2 then Repetido:=true; end; until (not(Process32Next(Snap,Datos))) or (Repetido); end; finally Windows.CloseHandle(Snap); end; Result:=Repetido; end; -Ahora, pon este código en el evento OnCreate de la form principal: procedure TForm1.FormCreate(Sender: TObject); begin if ProgramaAbiertoDosVeces then begin showmessage('El programa ha sido abierto mas de una vez'); Application.terminate; end; end; Otro ejemplo, mediante Mutex Enviado por: Juan Manuel Ospina C. ([email protected]) procedure Tform1.FormCreate(Sender: TObject); begin CreateMutex(nil, false, 'miprog1'); if GetLastError = ERROR_ALREADY_EXISTS then halt(0); ........ ........ Se trata de crear un mutex, y si a la hora de crearlo ya existe... pues sale de la aplicacion con Halt Lo del Mutex, mejor explicado.. Enviado por: Xavier Martínez ([email protected]) mutex.dpr program YoQueSe; uses Forms, Windows, Dialogs, form1 in 'form1.pas'; {$R *.RES} const NombreMutex='Programa 1.2'; var MiMutex:Thandle; begin mimutex:= CreateMutex(nil,true,NombreMutex); if MiMutex=0 then begin Showmessage('Error creando mutex'); halt; end; if GetLastError=ERROR_ALREADY_EXISTS then begin Showmessage('Programa ya está funcionando'); halt; end; Application.initialize; ......createform (bueno, ya sabes) ......run CloseHandle(MiMutex); end. |
Pregunta: | 40020 - ¿COMO CREAR BASES DE DATOS EN DELPHI CON SQL? |
Autor: | luis antonio hernandez espinosa |
poder crear bases de datos en sql y poder jalar archivos sin necesidad de abrir los alias
|
Respuesta: | Julio César Plascencia Hernández |
Buenas tardes:
Quiero suponer que antes del procedimiento de creación y manipulación de bases de datos y sus respectivos objetos tienes los privilegios necesarios para ello. Partiendo de esta premisa, primero genera en tu aplicación la conexión al sistema administrador de la base de datos. Una vez lograda la conexión, utiliza componentes de la clase TQuery (o su equivalente según el método de acceso a la base de datos que hayas escogido) y en la propiedad SQL escribe el código de la creación de los objetos (Create database..., Alter database, create table..., etc.) y busca el lugar más adecuado en tu aplicación para ejecutar estas sentencias. En el componente TQuery o equivalente te recomiendo que utilices el método ExecSQL o Execute (el método Open sólo se recomienda para sentencias de manipulación de datos para extraer información, esto es, del tipo SELECT). Esto debería funcionarte sin problema alguno para la creación de cualquier objeto de tu base de datos. Acerca de "jalar archivos sin necesidad de abrir los alias", no sé si te haya servido esto pero si no es así me gustaría que me explicaras un poco más al respecto. Saludos. Julio César Plascencia Hernández, Ingeniero de Software. |
Pregunta: | 40247 - CREAR BD INTERBASE EN TIEMPO DE EJECUCION DESDE DELPHI |
Autor: | alexandra mejia |
Hola, necesito informacion sobre como crear una bd interbase desde una aplicacion delphi. |
Respuesta: | Julio César Plascencia |
Buenas tardes:
Te convendría utilizar la sentencia SQL Create Database dentro de tu aplicación para que pudieses crear estos objetos de forma rápida, ya sería cuestión de que tú misma revisaras tu interfaz gráfica y la forma en que ligarías objetos para poder completar la sentencia al gusto del usuario final. Suena demasiado simple, pero funciona. Saludos. |
Pregunta: | 40374 - MIGRAR DE DELPHI 2.0 A DEPHI 3 O SUPERIOR |
Autor: | Fernando Iligaray |
Tengo desarrollado un sistema desde hace varios años en Delphi 2.0 y lo que me impide migrarlo a una versión mas actualizada de Dephi es que todos mis reportes estan hechos con QuickReport 1.0 lo que no es compatible con las versiones de Quickreport nuevas.
Alguien conoce una forma rapida de modificar una buena cantidad de reportes para hacerlos compatibles con Delphi 3 o superior. Saludos |
Respuesta: | Arturo Mendoza |
No de hecho, no es posible emigrar nada del QuickReport 1 al versiones posteriores, te recomiendo que vuelvas a hacer los reportes con la versión 3.05 del QReport es mas facil y trae mas opciones que la versión 1.
Ese es el trabajo de emigracion... Salu2. |
Pregunta: | 40713 - PUERTO PARALELO |
Autor: | Augusto Bonilla Cruz |
Hola, estoy haciendo un programita y necesito utilizar el puerto paralelo, estoy utilizando estas líneas con ensamblador:
asm mov dx,0378h mov al,11110000b out dx,al end; pero me encontré con un error de excepción que dice "raised exception class EPrivilege with message 'Privileged Instruction'", no sé cual sea el problema, tengo DELPHI 6 en un procesador Pentium 4 con Windows 2000, estuve leyendo que era porque es una instrucción del procesador y que posiblemente se encuentre en uso, como podría corregir este problema? De antemano agradezco su valiosa ayuda. |
Respuesta: | Luis Reyned León Romero |
Busca y baja de Internet el programa UserPort es freesoftware, ejecútalo y ya podras utilizar directamente los puertos en tu aplicación. Con este programa, no tienes que hacer ninguna modificación a tu código fuente. |
Respuesta: | Miguel Lucero |
Augusto
En W2K, WNT y WXP no podés acceder directamente a los puertos. Para ello tenés que usar alguna dll que te permita acceder al puerto. Yo hice un programa para programar PIC (NOPPP para Windows) y uso una dll para solucionar ese problema. El programa con código fuente y la dll en cuestión la podés bajar de http://www.lsis.com.ar/download.htm Espero que te sirva |
Pregunta: | 41076 - COMO METER UNA URL CON USUARIO:PASSWORD@DIRECCION? |
Autor: | Paco Reina |
He de automatizar un acceso a una pagina Web que requiere password.
Con el Explorer en la URL se puede poner "http://usuario:password@direccion y llego hasta la pagina, pero si uso el componente IdHTTP que viene con el delphi 7 me da error porque "se piensa" que detrás de los dos puntos va el puerto de la conexion. ¿Alguien me puede ayudar? Gracias |
Respuesta: | Mariano Giustozzi |
Hola
Lo que tenes que hacer es lo siguiente en uses tenes que declarar SHELLAPIS o SHELLAPI En este ejemplo es con unn boton procedure TForm1.WebCOVAXTEK1Click(Sender: TObject); begin ShellExecute(Form1.Handle,nil,Pchar ('http:\\www10.brinkster.com\covaxtek\'),'','',SW_SHOWNORMAL); end; |
Pregunta: | 41091 - SQL SERVER Y DELPHI 5.O PARA INSERTAR IMAGENES |
Autor: | FABIAN ENRIQUE CAYAMBE ANDRADE |
TENGO UNA BASE DE DATOS HECHA EN SQL SERVER Y REALICE LA CONEXIÓN CON DELPHI 5.0 PERO EN UNA TABLA TENGO UN CAMPO TIPO IMAGEN EN SQL SERVER 2000 PERO EN DELPHI 5.0 ME DA PROBLEMAS AL INSERTAR Y ME APARECE EL MENSAJE DE NON-BLOB Y NO ME PERMITE REALIZAR NADA.
COMO PUEDO SOLUCIONAR ESTE PROBLEMA O QUE CAMPO PUEDO DEFINIR PARA EVITAR ESTO. |
Respuesta: | G Horner |
Yo he insertado imágenes en la base de datos, quizá no sea la mejor forma, pero a mi me funcionó:
{RutaIlustracion es una variable conteniendo la ruta de la imagen, este procedimiento inserta un registro en una tabla, incluyendo la imagen, el campo emb_foto es de tipo blob} var Stream: TAdoBlobStream; begin gxConeccion:=TAdoConnection.create(gxConeccion); gxConeccion.ConnectionString:=ConeccionBD; gxconeccion.LoginPrompt:=false; gxConeccion.open; rs_auxiliar:=TAdoDataSet.create(rs_auxiliar); rs_auxiliar.Connection:=gxConeccion; rs_auxiliar.commandtext:='select * from Tabla'; rs_auxiliar.Active:=true; rs_auxiliar.Insert; Stream:=TAdoBlobStream.Create(TBlobField(rs_auxiliar.fieldbyname('emb_foto')),bmwrite); Stream.LoadFromFile(RutaIlustracion); Stream.Free; rs_auxiliar.FieldByName('emb_keyemb').value:=trim(ClaveEmbobinado); rs_auxiliar.Fieldbyname('emb_palabras').value:=trim(Palabras); rs_auxiliar.Fieldbyname('emb_lectura').value:=trim(Lectura); rs_auxiliar.Fieldbyname('emb_fotocel').value:=trim(FotoCelda); rs_auxiliar.FieldByName('emb_ladimp').value:=trim(LadoImprimir); rs_auxiliar.Post; rs_auxiliar.Connection:=nil; rs_auxiliar:=nil; gxConeccion.close; gxConeccion:=nil; end; |
|< << 48 49 50 51 52 53 54 55 56 57 58 >> >| |