* * * *
8 Visitatori, 0 Utenti

Comunicazioni tra utenti

Last 10 Shouts:

 

nomorelogic

Aprile 21, 2014, 09:40:59 am
writeln('Buona Pasqua a tutti');
 

xinyiman

Febbraio 11, 2014, 11:37:37 am
AndreaM purtroppo pochi leggono le shouts box. Dovresti aprire un 3d per avere maggior visibilità :)

AndreaM

Febbraio 08, 2014, 05:32:07 pm
 :)Gestione ed analisi dei file GPX.  :)
Un saluto a tutti! Quanti trà voi appassionati di programmazione sono anche appassionati di bici, corsa o altra attività all'aria aperta? Io sono uno di quelli!
Se fate uso di un navigatore GPS e siete interessati a sviluppare e condivide
 

nomorelogic

Gennaio 01, 2014, 01:55:14 am
Un Felice 2014 per tutti
 

xinyiman

Dicembre 31, 2013, 05:32:01 pm
Tanti cari auguri a tutti voi di un buon anno nuovo!!!!  :)

carmelo81

Dicembre 25, 2013, 07:26:47 pm
BuonNatale a voi!!
 

xinyiman

Dicembre 24, 2013, 02:50:23 pm
Tanti cari auguri amici miei. Che il natale vi porti tanto tanto lavoro pascaliano.
 

nomorelogic

Dicembre 24, 2013, 09:37:55 am
A tutti quanti gli auguri di un felice Natale e l'augurio che la serenità non manchi più per nessuno (neanche a chi non programma in pascal ;P )
 

xinyiman

Novembre 22, 2013, 07:33:40 pm
Si ma fortunatamente risolto  ;)

Antonello

Novembre 22, 2013, 09:26:30 am
Attacco in corso?

Show 50 latest
Pagine: [1] 2 3 ... 26

02 Lug 2014 - Indice

Beginners

Cos'è Lazarushttp://www.lazaruspascal.it/index.php?page=1
Le condizionihttp://www.lazaruspascal.it/index.php?page=10
Il pascal e il primo programmahttp://www.lazaruspascal.it/index.php?page=4
Costanti e variabilihttp://www.lazaruspascal.it/index.php?page=6
Input di datihttp://www.lazaruspascal.it/index.php?page=7
Operatori logici: OR e ANDhttp://www.lazaruspascal.it/index.php?page=13
Maggiore, minore e ugualehttp://www.lazaruspascal.it/index.php?page=14
Assegnazione e confrontohttp://www.lazaruspascal.it/index.php?page=16
Lavorare con i numerihttp://www.lazaruspascal.it/index.php?page=19
Lavorare con i caratterihttp://www.lazaruspascal.it/index.php?page=20
Numeri casuali (random)http://www.lazaruspascal.it/index.php?page=21
I vettorihttp://www.lazaruspascal.it/index.php?page=22
Le matricihttp://www.lazaruspascal.it/index.php?page=23
Dati strutturati e insiemihttp://www.lazaruspascal.it/index.php?page=28
Procedure e funzionihttp://www.lazaruspascal.it/index.php?page=29
I Filehttp://www.lazaruspascal.it/index.php?page=30
Le libreriehttp://www.lazaruspascal.it/index.php?page=31
Funzioni e procedure ricorsivehttp://www.lazaruspascal.it/index.php?page=32
I puntatorihttp://www.lazaruspascal.it/index.php?page=34
OOP (Object Oriented Programming) e classihttp://www.lazaruspascal.it/index.php?page=53


Applicazioni Made in Italy (o quasi) con Lazarus

MyErphttp://www.lazaruspascal.it/index.php?page=17
PeaZiphttp://www.lazaruspascal.it/index.php?page=26
Turbo Birdhttp://www.lazaruspascal.it/index.php?page=27
My Cinemahttp://www.lazaruspascal.it/index.php?page=46
Keyboard tutorialhttp://www.lazaruspascal.it/index.php?page=81
Calcio4Everhttp://www.lazaruspascal.it/index.php?page=82
MyNotexhttp://www.lazaruspascal.it/index.php?page=113
Enrollixhttp://www.lazaruspascal.it/index.php?page=116
DataStatixhttp://www.lazaruspascal.it/index.php?page=117
Bilancio Facilehttp://www.lazaruspascal.it/index.php?page=118
BibFlexhttp://www.lazaruspascal.it/index.php?page=128
Utility CF (Codice Fiscale)http://www.lazaruspascal.it/index.php?page=129
Retail NG.IThttp://www.lazaruspascal.it/index.php?page=137
ftpmd5backhttps://sourceforge.net/projects/ftpmd5back/?source=directory


Installazione

Installazione su Windows e Ubuntu Linuxhttp://www.lazaruspascal.it/index.php?page=3
fpcup: installazioni parallele di lazarus e fpchttp://www.lazaruspascal.it/index.php?page=130
Free Pascal e Lazarus sul Raspberry Pihttp://www.lazaruspascal.it/index.php?page=134
Guida all'installazione di fpc trunk da subversion su Raspberry con gentoo linuxhttp://www.lazaruspascal.it/index.php?page=138
Free Pascal per NDS: come scaricare i sorgenti da SVN e ricompilarlihttp://www.lazaruspascal.it/index.php?page=49
Ubuntu - aggiornare free pascal e lazarushttp://www.lazaruspascal.it/index.php?page=126


Free Pascal Nintendo DS

Free Pascal per NDS: come scaricare i sorgenti da SVN e ricompilarlihttp://www.lazaruspascal.it/index.php?page=49
Impostare Lazarus per l'utilizzo con Freepascal per Nintendo DShttp://www.lazaruspascal.it/index.php?page=51
[0] Free Pascal per NDS: Primi passihttp://www.lazaruspascal.it/index.php?page=121
[1] Free Pascal per NDS: Gestione dei fileshttp://www.lazaruspascal.it/index.php?page=122
[2] Free Pascal per NDS: Gestione della memoria videohttp://www.lazaruspascal.it/index.php?page=123
[3] Free Pascal per NDS: i tipi di background e le modalità grafichehttp://www.lazaruspascal.it/index.php?page=142
[4] Free Pascal per NDS: configurazione dei banchi di memoriahttp://www.lazaruspascal.it/index.php?page=143
[5] Free Pascal per NDS: background a tiles e mappehttp://www.lazaruspascal.it/index.php?page=144
[6] Free Pascal per NDS: rotazione e zoom dei backgroundhttp://www.lazaruspascal.it/index.php?page=147
[7] Free Pascal per NDS: gli spriteshttp://www.lazaruspascal.it/index.php?page=148




Web Development

Free Spider concetti base e prima applicazionehttp://www.lazaruspascal.it/index.php?page=87
L'oggetto requesthttp://www.lazaruspascal.it/index.php?page=88
L'oggetto responsehttp://www.lazaruspascal.it/index.php?page=89
L'oggetto TSpiderActionhttp://www.lazaruspascal.it/index.php?page=90
L'oggetto TSpiderPagehttp://www.lazaruspascal.it/index.php?page=93
Il ciclo di vita di una CGIhttp://www.lazaruspascal.it/index.php?page=94
Richieste simultaneehttp://www.lazaruspascal.it/index.php?page=95
Le sessioni utentehttp://www.lazaruspascal.it/index.php?page=96
Download/Upload Filehttp://www.lazaruspascal.it/index.php?page=97
Smart Module Loading Designhttp://www.lazaruspascal.it/index.php?page=98
Performancehttp://www.lazaruspascal.it/index.php?page=99
Free Spider e databasehttp://www.lazaruspascal.it/index.php?page=100
JQuery UIhttp://www.lazaruspascal.it/index.php?page=101
JQuery - Oggetto templatehttp://www.lazaruspascal.it/index.php?page=103
JQuery - Oggetto JQGridhttp://www.lazaruspascal.it/index.php?page=104
Redirecthttp://www.lazaruspascal.it/index.php?page=105
ExtPascal: panoramica sulle licenzehttp://www.lazaruspascal.it/index.php?page=108
ExtPascal: Installazione e configurazionehttp://www.lazaruspascal.it/index.php?page=109
ExtPascal: Installazione e configurazione / ExtPascal: Installation and configurationhttp://www.lazaruspascal.it/index.php?page=110
Le griglie in ExtPascal - ExtPascalToolkit / Grids into ExtPascal - ExtPascalToolkithttp://www.lazaruspascal.it/index.php?page=112
Recuperare codice HTML da pagina webhttp://www.lazaruspascal.it/index.php?page=11
Mandare mail con Lazarushttp://www.lazaruspascal.it/index.php?page=8
Indy gestiore server FTP lato Clienthttp://www.lazaruspascal.it/index.php?page=70
Visualizzare un file Html esternohttp://www.lazaruspascal.it/index.php?page=75
Indy 10 - Invio email con allegatihttp://www.lazaruspascal.it/index.php?page=80
Lavorare con file in formato JSON con Lazarushttp://www.lazaruspascal.it/index.php?page=107
http://



Miscellanea

Trascinare un file nel programmahttp://www.lazaruspascal.it/index.php?page=9
Stabilire il sistema operativohttp://www.lazaruspascal.it/index.php?page=12
Codice di attivazionehttp://www.lazaruspascal.it/index.php?page=25
Realizzare programmi multilinguahttp://www.lazaruspascal.it/index.php?page=33
Intercettare tasti premutihttp://www.lazaruspascal.it/index.php?page=48
System Tray con Lazarushttp://www.lazaruspascal.it/index.php?page=52
Conferma di chiusura di un applicazionehttp://www.lazaruspascal.it/index.php?page=56
Conversione numericahttp://www.lazaruspascal.it/index.php?page=63
Direttiva $macrohttp://www.lazaruspascal.it/index.php?page=71
Le permutazionihttp://www.lazaruspascal.it/index.php?page=78
Pascal Scripthttp://www.lazaruspascal.it/index.php?page=84
Come interfacciare periferica twainhttp://www.lazaruspascal.it/index.php?page=124



Operazioni sul file system

Lavorare con le directoryhttp://www.lazaruspascal.it/index.php?page=35
Utilizzare Unità esternehttp://www.lazaruspascal.it/index.php?page=36
File INIhttp://www.lazaruspascal.it/index.php?page=24
Il file: questo sconosciutohttp://www.lazaruspascal.it/index.php?page=55


Programmazione

Ampliare Lazarushttp://www.lazaruspascal.it/index.php?page=44
Esempio lista in pascalhttp://www.lazaruspascal.it/index.php?page=18
TTreeViewhttp://www.lazaruspascal.it/index.php?page=37
TTreeview e Menuhttp://www.lazaruspascal.it/index.php?page=38
Generare controlli RUN-TIMEhttp://www.lazaruspascal.it/index.php?page=39
Liste e puntatorihttp://www.lazaruspascal.it/index.php?page=57
Overload di funzionihttp://www.lazaruspascal.it/index.php?page=60
Funzioni a parametri variabilihttp://www.lazaruspascal.it/index.php?page=61
Proprietàhttp://www.lazaruspascal.it/index.php?page=62
TImage su Form e Panelhttp://www.lazaruspascal.it/index.php?page=69
PopUpMenu sotto Pulsante (TSpeedButton)http://www.lazaruspascal.it/index.php?page=68
Toolbarhttp://www.lazaruspascal.it/index.php?page=73
Evidenziare voci TreeViewhttp://www.lazaruspascal.it/index.php?page=74
StatusBar - aggirare l'errore variabile duplicatahttp://www.lazaruspascal.it/index.php?page=76
Overload di operatorihttp://www.lazaruspascal.it/index.php?page=102
La gestione degli errori in Lazarushttp://www.lazaruspascal.it/index.php?page=83
Disporre le finestre in un blocco unico (come Delphi)http://www.lazaruspascal.it/index.php?page=114
Aspetto retrò (Cmd Line)http://www.lazaruspascal.it/index.php?page=115
Advanced Record Syntaxhttp://www.lazaruspascal.it/index.php?page=145
Advanced Record Syntax: un esempio praticohttp://www.lazaruspascal.it/index.php?page=151



Report

LazReport, PDF ed immaginihttp://www.lazaruspascal.it/index.php?page=47



Crittografia e Sicurezza

Lazarus e la crittografiahttp://www.lazaruspascal.it/index.php?page=45
Brute forcehttp://www.lazaruspascal.it/index.php?page=79
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.http://www.lazaruspascal.it/index.php?page=135



Database

DB concetti fondamentali e connessioni standardhttp://www.lazaruspascal.it/index.php?page=140
DB concetti fondamentali e ZeosLibhttp://www.lazaruspascal.it/index.php?page=141
DB concetti fondamentali e DBGridhttp://www.lazaruspascal.it/index.php?page=146
DB concetti fondamentali e TDBEdit, TDBMemo e TDBTexthttp://www.lazaruspascal.it/index.php?page=149
UIB: Unified Interbasehttp://www.lazaruspascal.it/index.php?page=54
Da DataSource a Excelhttp://www.lazaruspascal.it/index.php?page=77
Linux + Zeos + Firebirdhttp://www.lazaruspascal.it/index.php?page=85
Dataset virtualehttp://www.lazaruspascal.it/index.php?page=86
Zeos ... dietro le quinte (prima parte)http://www.lazaruspascal.it/index.php?page=111



Best Practices

Creare un server multithreadhttp://www.lazaruspascal.it/index.php?page=136
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.http://www.lazaruspascal.it/index.php?page=135
Superclasse form base per programmi gestionali (e non)http://www.lazaruspascal.it/index.php?page=152



Risorse

FreePascal/Lazarus book: Start programming using Object Pascalhttp://freepascalanswers.wordpress.com/2012/09/02/freepascallazarus-book-startprog/
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Quando si sviluppa una applicazione destinata ad avere un certo numero di form, è bene prevedere che tutte abbiamo lo stesso
comportamento. Se poi a lavorare sullo stesso progetto c'è più di uno sviluppatore allora un metodo comune di lavoro diventa
obbligatorio.
Solitamente si dice che si devono definire degli standard di sviluppo.

Read More

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
In un'altro articolo (http://www.lazaruspascal.it/index.php?page=145) avevamo visto un po' di teoria relativamente a Advanced Record Syntax, ora proveremo un esempio pratico.

Quello che segue è il sorgente completo di un programmino da console che serve a fare un paio di test di questa caratteristica. Dopo il codice alcuni commenti.
Codice: [Seleziona]

program project1;

{$mode delphi}{$H+}
{$DEFINE USE_ADVANCED_RECORD_SYNTAX}

uses Classes;

type

  { TCliente }

  TCliente = record
  public
     type
       TIndirizzo = record
         Indirizzo: string[40];
         CAP: string[5];
         Citta: string[40];
         Prov: string[2];
       end;
       TTipoIndirizzo = (tiSedeOp, tiSedeLeg, tiSedeCon);
     var
       ID: integer;
       RagSociale: string[40];
       ParIva: string[13];

       SedeOperativa: TIndirizzo;
       SedeLegale: TIndirizzo;
       SedeConsegna: TIndirizzo;

     {$IFDEF USE_ADVANCED_RECORD_SYNTAX}
     procedure WriteIndirizzo(tipo: TTipoIndirizzo = tiSedeOp);
     {$ENDIF}
  end;

var Cliente: TCliente;

{ TCliente }

{$IFDEF USE_ADVANCED_RECORD_SYNTAX}
procedure TCliente.WriteIndirizzo(tipo: TTipoIndirizzo);
begin
   WriteLn(RagSociale);

   // test output
   case tipo of
      tiSedeLeg: if (SedeLegale.Indirizzo = '') and
                    (SedeLegale.CAP = '') and
                    (SedeLegale.Citta = '') and
                    (SedeLegale.Prov = '') then
                    tipo := tiSedeOp;
      tiSedeCon: if (SedeConsegna.Indirizzo = '') and
                    (SedeConsegna.CAP = '') and
                    (SedeConsegna.Citta = '') and
                    (SedeConsegna.Prov = '') then
                    tipo := tiSedeOp;
   end;

   // output
   case tipo of
      tiSedeOp: begin
                  Writeln(SedeOperativa.Indirizzo);
                  Writeln(SedeOperativa.CAP, ' - ' , SedeOperativa.Citta, ' (', SedeOperativa.Prov, ')');
      end;
      tiSedeLeg: begin
                  Writeln(SedeLegale.Indirizzo);
                  Writeln(SedeLegale.CAP, ' - ', SedeLegale.Citta, ' (', SedeLegale.Prov, ')');
      end;
      tiSedeCon:begin
                  Writeln(SedeConsegna.Indirizzo);
                  Writeln(SedeConsegna.CAP, ' - ', SedeConsegna.Citta, ' (', SedeConsegna.Prov, ')');
      end;
   end;
end;
{$ENDIF}


begin

  WriteLn('Test Advanced Record Syntax');
  Write('Advanced Record Syntax: ');
  {$IFDEF USE_ADVANCED_RECORD_SYNTAX}
  WriteLn('ON');
  {$ELSE}
  WriteLn('OFF');
  {$ENDIF}

  WriteLn('Size TCliente: ', SizeOf(Cliente));

  with Cliente do begin
     ID:= 1;
     RagSociale:='Lazarus Enterprises Inc.';
     ParIva := 'IT01234567890';

     With SedeOperativa do begin
        Indirizzo := 'Via dei mille nr. 999';
        CAP := '12345';
        Citta := 'Firenze';
        Prov := 'FI';
     end;

     With SedeConsegna do begin
        Indirizzo := 'Via dei bancali nr. 541';
        CAP := '55442';
        Citta := 'Ancona';
        Prov := 'AN';
     end;


  end;


  {$IFDEF USE_ADVANCED_RECORD_SYNTAX}
  Cliente.WriteIndirizzo(tiSedeLeg);
  {$ELSE}
  WriteLn(Cliente.RagSociale);
  Writeln(Cliente.SedeLegale.Indirizzo);
  Writeln(Cliente.SedeLegale.CAP, ' - ', Cliente.SedeLegale.Citta, ' (', Cliente.SedeLegale.Prov, ')');
  {$ENDIF}


end.




Le direttive
Sicuramente bisogna prestare attenzione alle direttive di questo sorgente.
La prima è da considerarsi obbligatoria in quanto questa caratteristica, almeno per ora, è stata implementata per compatibilità verso delphi e quindi bisogna impostare questo tipo di sintassi:
Codice: [Seleziona]
{$mode delphi}


La direttiva seguente:
Codice: [Seleziona]
{$DEFINE USE_ADVANCED_RECORD_SYNTAX}

Non è assolutamente obbligatoria, l'ho introdotta per meglio far comprendere alcuni aspetti di questa sintassi. Iniziamo quindi lasciando così questa direttiva.

Il record
Ho definito un tipo record per la gestione di una ipotetica tabella dei clienti. La dichiarazione inizia con:
Codice: [Seleziona]
TCliente = record

Notare che al suo interno ho nidificato un'altro tipo record:
Codice: [Seleziona]
TIndirizzo = record

in quanto più sotto ho bisogno di 3 campi dello stesso tipo (SedeOperativa, SedeLegale e SedeConsegna).
Notare soprattutto che se è attiva la direttiva USE_ADVANCED_RECORD_SYNTAX allora la procedura WriteIndirizzo  farà parte del record, esattamente come ci aspetteremmo per una classe.

La procedura WriteIndirizzo
Più sotto trovate il codice della procedura che non fa altro che, appunto, scrivere sulla console l'indirizzo richiesto. Si aspetta infatti un parametro (tipo indirizzo) però è fatta in modo che: se l'indirizzo è "sede legale" o "sede consegna" e se questo indirizzo non è mai stato fornito, allora viene scritto come default l'indirizzo "sede operativa". Ovviamente, nell'ipotetica applicazione, questo indirizzo è obbligatoriamente presente.

Eseguiamo con direttiva USE_ADVANCED_RECORD_SYNTAX
Se apriamo una console e lanciamo il programma, otteniamo il seguente output:
Codice: [Seleziona]
Test Advanced Record Syntax
Advanced Record Syntax: ON
Size TCliente: 332
Lazarus Enterprises Inc.
Via dei mille nr. 999
12345 - Firenze (FI)

Notare che l'indirizzo richiesto è la "sede legale" (Cliente.WriteIndirizzo(tiSedeLeg)) che non è mai stata fornita e a video troviamo la "sede operativa".
Notare anche la dimensione del record: 332 byte.

Eseguiamo senza direttiva USE_ADVANCED_RECORD_SYNTAX
Disabilitiamo ora la direttiva commentandola in questo modo:
Codice: [Seleziona]
// {$DEFINE USE_ADVANCED_RECORD_SYNTAX}  

e poi ricompiliamo il programma e lanciamolo nuovamente.
Otterremo il seguente output:
Codice: [Seleziona]
Test Advanced Record Syntax
Advanced Record Syntax: OFF
Size TCliente: 332
Lazarus Enterprises Inc.

 -  ()


Nel codice tradizionale si fa espressamente riferimento alla "sede legale" e non viene stampato nulla. Ovviamente avremmo potuto ovviare mettendo del codice "a mano", in modo tradizionale, all'interno del programma ed avremmo ottenuto lo stesso risultato. In questo modo però avremmo dovuto rinunciare all'incapsulazione ed a tutti i vantaggi che ne derivano.
Notare la dimensione del record, anche in questo caso: 332 byte. Esattamente come nell'altro caso.




Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
In questo articolo visioneremo i concetti basilari della programmazione per database con i componenti che permettono la visualizzazione dei contenuti di un campo appartenente al record selezionato di un datasource.

Nell'esempio che andremo a vedere prenderemo in considerazione SQLite come DBMS. La struttura SQL che useremo per il nostro esempio è la seguente.

CREATE TABLE "main"."" (
    "Id" INTEGER PRIMARY KEY AUTOINCREMENT,
    "Cognome" TEXT,
    "Nome" TEXT,
    "Citta" TEXT
);

Lazarus possiede molti package per poter lavorare con i DB, i due sicuramente più usati, mantenuti e testati sono: i componenti standard rilasciati con Lazarus stesso e ZeosLib.
Questo articolo prende in considerazione ZeosLib il quale permette un altissimo grado di astrazione del DBMS, cosa estremamente utile per non vincolare l'applicazione al DBMS. L'esempio che andremo a vedere vi permetterà di acquisire i rudimenti per impadronirvi dell'argomento.

Per prima cosa, creiamo una nuova applicazione tenendo in considerazione quanto imparato nei precedenti articoli sui database, quello che segue è il codice del nostro esempio

Codice: [Seleziona]

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, db, FileUtil, ZConnection, ZDataset, Forms, Controls,
  Graphics, Dialogs, DBGrids, DbCtrls, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    DataSource1: TDataSource;
    DBEdit1: TDBEdit;
    DBGrid1: TDBGrid;
    DBMemo1: TDBMemo;
    DBNavigator1: TDBNavigator;
    DBText1: TDBText;
    ZConnection1: TZConnection;
    ZQuery1: TZQuery;
    Q_Inserimento: TZQuery;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    function GetLastId(): integer;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
   LastId: integer;
begin
     LastId:=Self.GetLastId()+1;
     Self.Q_Inserimento.SQL.Text:='INSERT INTO utenti(Id, Cognome,Nome,Citta)VALUES(' + IntToStr(LastId) + ',''Cognome' + IntToStr(LastId) + ''',''Nome' + IntToStr(LastId) + ''',''Città' + IntToStr(LastId) + ''');';
     Self.Q_Inserimento.ExecSQL;
     Self.ZQuery1.Refresh;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     //svuoto la tabella
     Self.Q_Inserimento.SQL.Text:='DELETE FROM utenti;';
     Self.Q_Inserimento.ExecSQL;
     Self.ZQuery1.Refresh;
end;

function TForm1.GetLastId(): integer;
var
   ret: integer;
begin
     ret:=0;
     Self.Q_Inserimento.SQL.Text:='select Id as MaxId from utenti group by Id order by Id desc;';
     Self.Q_Inserimento.Open;
     if not Self.Q_Inserimento.EOF then
     begin
          Self.Q_Inserimento.First;
          ret:=Self.Q_Inserimento.FieldByName('MaxId').AsInteger;
     end;
     Self.Q_Inserimento.Close;
     result:=ret;
end;

end.


ma prendiamo in considerazione le singole parti

Andiamo a vedere la FormCreate, ovvero le azioni che vengono svolte dal programma alla creazione della form, nel nostro caso specifico la prima procedura che viene eseguita dal programma

Codice: [Seleziona]

procedure TForm1.FormCreate(Sender: TObject);
begin
     //svuoto la tabella
     Self.Q_Inserimento.SQL.Text:='DELETE FROM utenti;';
     Self.Q_Inserimento.ExecSQL;
     Self.ZQuery1.Refresh;
end;


come si può vedere andiamo a cancellare il contenuto della tabella usata nell'esempio.

Poi possiamo notare che abbiamo creato la seguente funzione
Codice: [Seleziona]

function TForm1.GetLastId(): integer;
var
   ret: integer;
begin
     ret:=0;
     Self.Q_Inserimento.SQL.Text:='select Id as MaxId from utenti group by Id order by Id desc;';
     Self.Q_Inserimento.Open;
     if not Self.Q_Inserimento.EOF then
     begin
          Self.Q_Inserimento.First;
          ret:=Self.Q_Inserimento.FieldByName('MaxId').AsInteger;
     end;
     Self.Q_Inserimento.Close;
     result:=ret;
end;

che permette di ottenere l'indice massimo contenuto nella griglia.
Nell'evento OnClick del pulsante Button1 andiamo ad inserire il codice che automaticamente aggiunge in maniera incrementale le singole righe della tabella basandosi sul risultato della funzione GetLastId visionata poco sopra.
Codice: [Seleziona]

procedure TForm1.Button1Click(Sender: TObject);
var
   LastId: integer;
begin
     LastId:=Self.GetLastId()+1;
     Self.Q_Inserimento.SQL.Text:='INSERT INTO utenti(Id, Cognome,Nome,Citta)VALUES(' + IntToStr(LastId) + ',''Cognome' + IntToStr(LastId) + ''',''Nome' + IntToStr(LastId) + ''',''Città' + IntToStr(LastId) + ''');';
     Self.Q_Inserimento.ExecSQL;
     Self.ZQuery1.Refresh;
end;


Poi successivamente andiamo ad impostare la proprietà ReadOnly a True nella DbGrid del nostro esempio in modo da non lasciare modificare i dati all'utente dalla DBGrid stessa.
Ora aggiungiamo al seguente esempio 3 componenti

    DBEdit1: TDBEdit;
    DBMemo1: TDBMemo;
    DBText1: TDBText;

Andiamo ad impostare per il componente DBEdit1 le seguenti proprietà:
DataSource: DataSource1
DataField: Nome

Andiamo ad impostare per il componente DBText1 le seguenti proprietà:
DataSource: DataSource1
DataField: Cognome

Andiamo ad impostare per il componente DBMemo1 le seguenti proprietà:
DataSource: DataSource1
DataField: Citta

Se eseguiamo il programma vedremo che in funzione del record su cui ci spostiamo possiamo visionare ma non modificare il campo Nome, mentre possiamo visionare e modificare i campi Cognome e Citta.

Qui trovate il link per scaricare l'esempio dell'articolo: www.lazaruspascal.it/esempi/Quarta_Applicazione.zip
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

16 Ott 2011 - Installare Lazarus

In questo articolo vedremo come installare lazarus su Windows e su Ubuntu Linux. Gli altri sistemi operativi non verranno trattati perché sono troppi e ci si augura che chi si avvicina alla programmazione sia almeno capace di installare un ambiente di sviluppo.

WINDOWS
Collegarsi a questo indirizzo  http://sourceforge.net/projects/lazarus/files/  e selezionare la voce relativa a Windows (dipende dall'architettura del vostro PC se scaricare quella a 32bit o a 64bit) e scaricare l'ultima versione stabile disponibile. Una volta scaricato il programma di installazione lanciatelo e con pochi click avrete il vostro lazarus funzionante.

UBUNTU LINUX
Per installare lazarus su ubuntu andare nella propria home e creare un file che chiameremo getlaz e che avrà come contenuto queste righe:

 #!/bin/sh
 gpg --keyserver hkp://pgp.mit.edu:11371 --recv-keys 6A11800F
 gpg --export 6A11800F | apt-key add -
 echo "deb http://www.hu.freepascal.org/lazarus/ lazarus-stable universe" \
     >/etc/apt/sources.list.d/lazarus.list
 apt-get update
 apt-get install lazarus

dopodichè aprire una console e digitare i seguenti due comandi

chmod +x getlaz
sudo ./getlaz

Digitare s o S dove verrà richiesto e attendere la fine dell'installazione del programma. Oppure potete comodamente installarlo dall'Ubuntu Software Center. In alternativa c'è ancora la possibilità di installarlo dalla console digitando:

sudo apt-get install fpc-source
sudo apt-get install lazarus
 

Una volta installato potete trovare Lazarus tra i vostri programmi.

Buona programmazione :)

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Pagine: [1] 2 3 ... 26

Recenti

How To

Trascinare un file nel programma by xinyiman
DB concetti fondamentali e ZeosLib by xinyiman
Recuperare codice HTML da pagina web by xinyiman
Mandare mail con Lazarus by xinyiman
Stabilire il sistema operativo by xinyiman
Esempio lista in pascal by xinyiman
File INI by xinyiman
Codice di attivazione by xinyiman
Realizzare programmi multilingua by xinyiman
Lavorare con le directory by xinyiman
Utilizzare Unità esterne by Loryea
TTreeView by xinyiman
TTreeview e Menu by xinyiman
Generare controlli RUN-TIME by xinyiman
LazReport, PDF ed immagini by xinyiman
Intercettare tasti premuti by xinyiman
Ampliare Lazarus by xinyiman
Lazarus e la crittografia by xinyiman
System Tray con Lazarus by xinyiman
UIB: Unified Interbase by Microges2000
Il file: questo sconosciuto by Microges2000
Conferma di chiusura di un applicazione by xinyiman
Liste e puntatori by Microges2000
Overload di funzioni by Microges2000
Funzioni a parametri variabili by Microges2000
Proprietà by Microges2000
Conversione numerica by Microges2000
TImage su Form e Panel by Maverich
Indy gestiore server FTP lato Client by Maverich
PopUpMenu sotto Pulsante (TSpeedButton) by Maverich
Direttiva $macro by Microges2000
Toolbar by xinyiman
Evidenziare voci TreeView by Maverich
Visualizzare un file Html esterno by Maverich
StatusBar - aggirare l'errore variabile duplicata by Maverich
Da DataSource a Excel by xinyiman
Le permutazioni by xinyiman
Brute force by xinyiman
Indy 10 - Invio email con allegati by Maverich
La gestione degli errori in Lazarus by xinyiman
Pascal Script by xinyiman
Linux + Zeos + Firebird by xinyiman
Dataset virtuale by xinyiman
Overload di operatori by Microges2000
Lavorare con file in formato JSON con Lazarus by nomorelogic
Zeos ... dietro le quinte (prima parte) by Stilgar
Disporre le finestre in un blocco unico (come Delphi) by Maverich
Aspetto retrò (Cmd Line) by xinyiman
Come interfacciare periferica twain by Narciso
Ubuntu - aggiornare free pascal e lazarus by xinyiman
fpcup: installazioni parallele di lazarus e fpc by nomorelogic
Free Pascal e Lazarus sul Raspberry Pi by nomorelogic
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal. by nomorelogic
Creare un server multithread by xinyiman
guida all'installazione di fpc trunk da subversion in linux gentoo by nomorelogic
Indice by nomorelogic
DB concetti fondamentali e connessioni standard by xinyiman
Advanced Record Syntax by nomorelogic
DB concetti fondamentali e DBGrid by xinyiman
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText by xinyiman
Advanced Record Syntax: un esempio pratico by nomorelogic
Superclasse form base per programmi gestionali (e non) by nomorelogic
Utenti
  • Utenti in totale: 329
  • Latest: souloer
Stats
  • Post in totale: 7383
  • Topic in totale: 866
  • Online Today: 42
  • Online Ever: 74
  • (Luglio 09, 2012, 11:05:53 am)
Utenti Online
Users: 0
Guests: 8
Total: 8

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.