Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ahora nos toca pensar en como nos conectaremos con nuestra BD desde delphi.
Hay varios componentes que lo hacen, los que yo conozco, Zeos e Intebase (IB).
Bien:
Zeos es muy bueno, muy rapido, sencillo de instalar, gratis etc.
IB esta incluido en Delphi, es rapido, sencillo de usar, etc.
Cual usamos entonces?.
Segun mi poca experiencia:
Zeos aunque muy bueno, aveces grita y no nos dice por que, nos muestra errores y no nos dice ni donde ni como, ni cuando, osea, para nosotros los novatos es un dolor de cabeza.
IB tambien aveces grita, pero por lo menos de vez en cuando nos dice donde esta el error, segun mi punto de vista es mas comodo, por decirlo de alguna manera.
Por ende, nos conectaremos por medio de IB.
Saludos.
Continua.....
__________________
Siempre Novato
Responder Con Cita
  #2  
Antiguo 01-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Empecemos con Delphi.
Una vez arrancado nuestro delphi, tenemos el form1 de siempre.
Creemos un Datamodule que para mi es una buena opcion.
Entonces:
File, new, DataModule nos creara el Datamodule1.

Vamos a la paleta Interbase y le arrastraremos a nuestro dataModule:
Un IBDatabase
Un IBTransaction

Demosle Doble Click al IBDatabase:
Os saldra una pantalla en la que pondremos esencialmente los mismos datos que pusimos con el IBExpert:



Dejad sin marcar la opcion Login Prompt, asi no os pedira el password.
Si queris asegurar la conexion, dadle a Test, os dara un mensaje, si esta bien:

---------------------------
Successful Connection
---------------------------
OK
---------------------------


Ya estamos conectados, dadle OK.

Ahora necesitamos las transacciones, en esto Firebird es muy concreto si no las haces se enoja y mucho

Demosle Doble Click al IBTransaction.
Nos saldra una pantalla con varias opciones, pinchemos en Read_Commited:



Bueno, ya estamos conectados y tenemos nuestras transacciones, mas o menos aseguradas.
No os olvideis de ir guardando todo...
Saludos
Continua....
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 01-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Como ya tenemos casi todo listo y tenemos una tabla USUARIOS creada lo logico es hacer un Form para loguearnos, entonces crearemos un form mas.
Como siempre:
File New, Form.
Esto nos creara el form2 que es el que iniciara el programa:
Arrastremos al nuevo form:
2 Edit.
2 Label
2 Botones
1 IBQuery (de la paleta Interbase)

Cambiemos el Name del form por FLogin, quedaria asi:



Bien, ahora nos queda poner el codigo que necesitamos:
Empecemos por el IBQuery:

En la propiedad Database pondremos la direccion de la IBDatabase:
DataModule2.IBDatabase1

En la propiedad SQL (strings) presionaremos el boton y nos saldra una pantalla:
En este caso solo tendremos la Tabla Usuarios, escribiremos esto:

Código SQL [-]
SELECT CodUsuario, Nombre, Clave FROM Usuarios WHERE
CodUsuario = :cod

Quedara asi:



Presionamos OK.

Ahora en la propiedad Params del IBQuery, presionamos el boton y nos saldra una pequeña pantalla, ahi cambiaremos algunos datos, quedara asi:



Segimos con los botones.
Saludos
Continua....
__________________
Siempre Novato

Última edición por Caral fecha: 01-07-2010 a las 22:14:23.
Responder Con Cita
  #4  
Antiguo 01-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Segimos con el form FLogin:
Coloquemos una variable (cuenta), esta nos servira para determinar la cantidad de veces que se intenta introducir la clave:
Código Delphi [-]
var
  FLogin: TFLogin;
  Cuenta : integer;
 
implementation

En el evento OnCreate la iniciamos en cero:

Código Delphi [-]
procedure TFLogin.FormCreate(Sender: TObject);
begin
   Cuenta := 0;
 
end;

En el boton OK:

Código Delphi [-]
procedure TFLogin.BtnOkClick(Sender: TObject);
begin
   IBQuery1.Params.ParamByName('Cod').Value:= Edit1.Text;
   IBQuery1.Active:= True;
If IBQuery1.RecordCount < 1 then
    Begin
       Cuenta := Cuenta + 1;
       MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
       Edit1.Text := '';
       Edit2.Text := '';
       IBQuery1.Active := False;
       If Cuenta = 3 then Close;
    end
   else
       If IBQuery1Clave.AsString = Edit2.Text then
        Begin
          Form1.Show;
          IBQuery1.Active := False;
          FLogin.Visible:= False;
        end
     else
         Begin
           Cuenta := Cuenta + 1;
           MessageDlg('Clave Inválida',mtError, [mbOK], 0);
           Edit2.Text := '';
           IBQuery1.Active := False;
           If Cuenta = 3 then Close;
         end;
 
end;

En el boton Cancelar:

Código Delphi [-]
procedure TFLogin.Button2Click(Sender: TObject);
begin
  Close;
end;

Ahora solo nos queda que el programa arranque desde el form login:
Vamos al Proyecto, en units, project y cambiamos el orden de entrada al programa asi:

Código Delphi [-]
program Project1;
 
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {DataModule2: TDataModule},
  UFLogin in 'UFLogin.pas' {FLogin};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.CreateForm(TDataModule2, DataModule2);
  Application.CreateForm(TFLogin, FLogin);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Listo, a correr.
AHHHHHHHH, que monton de errores, logico, somos novatos y se nos olvido asignar algunas cositas.
Son faciles de apreciar pero son errores que nos pueden pasar por descuido:

Primero regresemos un poco atras, al datamodule:

1- En el IBDatabase nos olvidamos de colocar en su propiedad DefaultTransaction el IBTransaction.
Con esto ya se ligan.
2- Lo mismo con el IBTransaction, en su propiedad DefaultDatabase lo ligamos pero esta vez con el IBDatabase.
Osea, uno con otro.

Regresemos al FLogin.
Demosle doble click al IBQuery, nos saldra una pequeña pantalla, raton derecho y add, nos colocara los campos dentra de esta pantalla.
Listo, no era para tanto, corredlo, esta listo para usarse.

Ojala os sirva de algo este.

Saludos

Para dudas y aclaraciones estan los maestros
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 02-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Mi amigo y maestro Casimiro me envia una informacion que me parece muy importante aportar:
Cita:
Te informo de un par de cositas sobre el tutorial:

Cuando creas un campo que va a ser la clave primaria no tienes que crear
un índice, lo que hay que hacer es indicarle que es la clave primaria
(primary key) y él sólo automáticamente creará el índice que necesite.
Te he adjuntado una imagen para que lo veas.


Cita:
En el componente de base de datos has puesto el usuario, la clave y el
sql_role, en este último caso le has puesto el valor 3. Creo que te has
confundido con el dialecto. El dialecto se indica cuando se está creando
la base de datos, hay un campo que indica si se quiere con dialecto 1 o
el dialecto 3. Esto de role tiene que ver con los privilegios de los
usuarios.
Muchas gracias por el aporte.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 02-07-2010
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Alucinante documental de Firebid, es un placer pertenecer al clubdelphi.

Un saludo.
Responder Con Cita
  #7  
Antiguo 02-07-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola Caral,
es importante que cuando se crea una BBDD , se indique el CHARSET, para que luego el tema de acentos, la eñe , etc no nos den problemas a la hora de hacer búsquedas, ... siempre y cuando trabajemos en castellano.
Yo suelo poner el ISO8859_1 y en general no he tenido problemas.

Buena aportación, novato.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 13-12-2010
DalberDurango DalberDurango is offline
Registrado
 
Registrado: ago 2006
Ubicación: Colombia
Posts: 2
Poder: 0
DalberDurango Va por buen camino
Consulta

En el boton OK:

Código Delphi [-]
procedure TFLogin.BtnOkClick(Sender: TObject);
begin
   IBQuery1.Params.ParamByName('Cod').Value:= Edit1.Text;
   IBQuery1.Active:= True;
If IBQuery1.RecordCount < 1 then
    Begin
       Cuenta := Cuenta + 1;
       MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
       Edit1.Text := '';
       Edit2.Text := '';
       IBQuery1.Active := False;
       If Cuenta = 3 then Close;
    end
   else
       If IBQuery1Clave.AsString = Edit2.Text then {Me arroja error en esta linea}
        Begin
          Form1.Show;
          IBQuery1.Active := False;
          FLogin.Visible:= False;
        end
     else
         Begin
           Cuenta := Cuenta + 1;
           MessageDlg('Clave Inválida',mtError, [mbOK], 0);
           Edit2.Text := '';
           IBQuery1.Active := False;
           If Cuenta = 3 then Close;
         end;
 
end;


Tengo un problema en la linea que esta indicada
If IBQuery1Clave.AsString = Edit2.Text then {Me arroja error en esta linea}

[DCC Error] ULogin.pas(51): E2003 Undeclared identifier: 'IBQuery1clave'

no se que hacer, agradezco la ayuda y perdonen la novatada.
Responder Con Cita
  #9  
Antiguo 13-12-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No dices el error que te envia, pero podria ser que no esta en la caja de texto el campo clave, como solucionarlo, facil.
Dale doble click a IBQuery1.
Te saldra una pequeña pantalla.
Dale click derecho y ADD.
Esto colocara los campos en esa pantalla.
De momento solo coloca los que te den error, en este caso Clave.
Corre el programa otra vez.
Saludos
PD: Hay otra forma de solucionarlo pero empecemos por ahi.
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 13-12-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola

Cita:
Empezado por DalberDurango Ver Mensaje
Tengo un problema en la linea que esta indicada
If IBQuery1Clave.AsString = Edit2.Text then {Me arroja error en esta linea}

[DCC Error] ULogin.pas(51): E2003 Undeclared identifier: 'IBQuery1clave'

no se que hacer, agradezco la ayuda y perdonen la novatada.
El mensaje de error es muy claro, no existe nada llamado IBQuery1Clave, por lo que esa línea no se puede compilar.

¿ Que es IBQuery1clave ?. Con toda seguridad un campo persistente. Así que como bien dice Caral, deberías crearlos.

Aunque personalmente prefiero sustituir esa línea por :If IBQuery1.FieldByName('Clave').AsString = Edit2.Text thenY es que prefiero acceder a los campos de esta forma, en lugar de hacerlo por el correspondiente campo persistente. Te ahorras bastantes problemas de este tipo.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #11  
Antiguo 13-12-2010
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Cita:
Empezado por guillotmarc Ver Mensaje
Hola



El mensaje de error es muy claro, no existe nada llamado IBQuery1Clave, por lo que esa línea no se puede compilar.

¿ Que es IBQuery1clave ?. Con toda seguridad un campo persistente. Así que como bien dice Caral, deberías crearlos.

Aunque personalmente prefiero sustituir esa línea por :If IBQuery1.FieldByName('Clave').AsString = Edit2.Text thenY es que prefiero acceder a los campos de esta forma, en lugar de hacerlo por el correspondiente campo persistente. Te ahorras bastantes problemas de este tipo.

Saludos.
Por otro lado, esa forma de trabajar, traslada los errores a ejecución (compilaría bien, pero si el nombre del campo tiene un error o no existe, se produciría un error al ejecutar dicha línea), lo que en determinadas circustancias hace que los procesos de prueba y puesta a punto sean más largos y complejos. Ambas formas de trabajar tienen sus pros y contras.
__________________
http://www.gestionportable.com
Responder Con Cita
  #12  
Antiguo 13-05-2011
coej coej is offline
Miembro
NULL
 
Registrado: abr 2011
Ubicación: MANCHEGO-ESPAÑOL
Posts: 65
Poder: 14
coej Va por buen camino
Cita:
Empezado por DalberDurango Ver Mensaje
En el boton OK:

Código Delphi [-]
procedure TFLogin.BtnOkClick(Sender: TObject);
begin
   IBQuery1.Params.ParamByName('Cod').Value:= Edit1.Text;
   IBQuery1.Active:= True;
If IBQuery1.RecordCount < 1 then
    Begin
       Cuenta := Cuenta + 1;
       MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
       Edit1.Text := '';
       Edit2.Text := '';
       IBQuery1.Active := False;
       If Cuenta = 3 then Close;
    end
   else
       If IBQuery1Clave.AsString = Edit2.Text then {Me arroja error en esta linea}
        Begin
          Form1.Show;
          IBQuery1.Active := False;
          FLogin.Visible:= False;
        end
     else
         Begin
           Cuenta := Cuenta + 1;
           MessageDlg('Clave Inválida',mtError, [mbOK], 0);
           Edit2.Text := '';
           IBQuery1.Active := False;
           If Cuenta = 3 then Close;
         end;
 
end;


Tengo un problema en la linea que esta indicada
If IBQuery1Clave.AsString = Edit2.Text then {Me arroja error en esta linea}

[DCC Error] ULogin.pas(51): E2003 Undeclared identifier: 'IBQuery1clave'

no se que hacer, agradezco la ayuda y perdonen la novatada.
Creo que es porque en el IBQUERY del Flogin, no has pulsado dos veces y añadido los campos, a mí al menos al seguir el manual me ha dado ese error, y me he dado cuenta que me faltaba hacer ese paso en el ibquery, haber si es eso...
Responder Con Cita
  #13  
Antiguo 16-01-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Crear bases de datos y sus tablas por comandos C:\>

Me gustaría añadir que también se pueden crear bases de datos Firebird y sus tablas mediante comandos del command.exe (El antiguo DOS). Para ello basta salir a esta pantalla de fondo negro y escribir en el prompt del sistema estos comandos, uno a uno.
Basta pasar del command_DOS al command_ISQL de Firebird.
Antes de todo crea una carpeta y una subcarpeta para guardar los datos, desde el prompt de comandos, si quieres probar.
Sal de los directorios que aparecen y regresa a la raíz = Posición C:\ Para ello ejecuta:

c:\>CD\ [Intro] = change directory . Para la barra inversa (detrás de CD): Pulsar AltGr, y sin soltarla, la tecla [\ºª] que está a la izquierda del uno en cifra de la fila superior del teclado. Luego escribe en el prompt del dos:

C:\>MD C:\CARPETA1\SUB2 [Intro] = Crear carpeta y subc. para la basededato * .FDB

c:\> CD Program Files\firebird\firebird_2_5\BIN [Intro] =Pasamos al directorio donde están los ejecutables de Firebird.

Tendrás una fila de directorios más larga. Ahora arranca el ejecutable de sentencias SQL de Firebird.

C:\Program Files\Firebird\Firebird_2_5\BIN> ISQL [Intro] = Aquí arrancamos el procesador de órdenes SQL de Firebird.
Aparece el aviso de connect o create y el prompt del SQL de Fb.

A partir de ahora no olvides acabar cada sentencia con el carácter de cierre ( -punto y coma- y luego pulsas la tecla intro como es habitual:
Creamos la base de datos escribiendo:
SQL\> CREATE DATABASE 'LOCALHOST:C:\CARPETA1\SUB1\MIBASE.FDB' USER 'SYSDBA' PASSWORD 'masterkey'; [Intro]
Si la orden es correcta aparece el prompt SQL>
Para salir del SQL escribe EXIT; o apaga a ventana de comandos.
Comprueba que la base de datos se creó realmente con:
SHOW DATABASE;

Para crear una tabla sencilla con los campos NUM, ITEM, FECHA; escribe en el SQL>
CREATE TABLE MiTabla (Num Integer, Item Varchar(20), Fecha Date);
Comprueba:
SHOW TABLE MiTabla;
Mete algo:
INSERT INTO MiTabla (Num, Item, Fecha) Values (1, 'Abeto negro', CURRENT_DATE);
y por último mira lo que hay en la tabla:
SELECT * FROM MiTabla;
Para salir ejecuta: (Si las sentencias son muy largas pulsa Intro y aparecen el prompt CON> de continuación)
Exit; (No olvides el punto y coma antes de pulsar Intro)
Responder Con Cita
  #14  
Antiguo 17-01-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Gracias bulc.

Quizá se pueda adaptar lo que explicas y crear archivos de comandos (cmd, bat) junto a pipes o flujos para automatizarlo.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #15  
Antiguo 17-01-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Si, así es. Un fichero texto plano script lo haría todo

Lo que pretendía era dejar esa opción abierta a los usuarios antes de pasar a DBExpress o FlameRobin.
Siempre me digo que lo que yo sé tiene poco valor comparado con lo que saben, y aportan, otros foreros.
Saludos,
JParada
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Programa (Mini Tutorial) novatos Caral Varios 82 19-10-2016 19:20:12
Empezar con Delphi5 y Firebird marcial Firebird e Interbase 1 04-10-2008 11:16:29
Hagamos todos un sistema [tutorial no novatos] desde cero !!!!!!!!!!! david_uh Varios 42 29-07-2008 00:57:43
Como Crear una Base de Datos Access (Tutorial Novatos) Caral Tablas planas 3 06-12-2007 20:51:50
Consejos para empezar con firebird seoane Firebird e Interbase 21 22-03-2007 05:14:33


La franja horaria es GMT +2. Ahora son las 19:32:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi