PDA

Visualizza la versione completa : [DELPHI] This e altre amenità varie


kentaromiura
09-03-2006, 13:15
Olaz! ho iniziato a sviluppare un applicativo in Delphi
con Firebird embedded , ho un paio di domande ,
allora :

1) non mi ricordo piu' come si fà ad usare la classe "this"
in delphi ..ho provato con Self ma a volte la vede e altre no..

2) io apro la connection all' apertura del mio form MAIN
e la chiudo alla chiusura, c'e' qualche problema in questo?

3) Esiste un modo veloce di cambiare il Name a un form, a una label o textbox? (io uso la notazione txtNomeSignificativo, frmEccettera.. quindi rinomino ogni elemento, ma la proprietà Name e' mescolata bene in mezzo alle altre proprieta' nell'Object Inspector..)

4) Esistono fonti delphi con articoli e novita?



[OT]
ieri ho connesso tramite FBEmbed.dll un applicativo a una tabella fdb ,
ho impostato nella connection la vendorlib come fbembed.dll,e l'ho attivata
poi ho usato una TQuery che si riferiva alla connection ,
poi ho usato un TDataset che puntava al Tquery parametrizzato e infine un
TDBListbox che faceva riferimento al dataset,
ho impostato la tabella di riferimento e nel momento di impostare il campo (mentre cliccavo sul nome del campo restituito dalla Tquery)delphi si e' chiuso,
naturalmente senza salvare le varie modifiche.. :dhò: :dhò:

alka
09-03-2006, 13:48
Originariamente inviato da kentaromiura
1) non mi ricordo piu' come si fà ad usare la classe "this"
in delphi ..ho provato con Self ma a volte la vede e altre no..

Si usa Self. Ricorda che Delphi è un linguaggio misto procedurale/OOP, quindi Self è presente solo dove ha senso, cioè nei metodi appartenenti ad una classe, e non nelle procedure/funzioni statiche sparse all'interno di una unit.


Originariamente inviato da kentaromiura
2) io apro la connection all' apertura del mio form MAIN
e la chiudo alla chiusura, c'e' qualche problema in questo?

Direi di no.


Originariamente inviato da kentaromiura
3) Esiste un modo veloce di cambiare il Name a un form, a una label o textbox? (io uso la notazione txtNomeSignificativo, frmEccettera.. quindi rinomino ogni elemento, ma la proprietà Name e' mescolata bene in mezzo alle altre proprieta' nell'Object Inspector..)

Sembra "mescolata bene", ma in realtà è più facilmente reperibile che in VS dove inizia con una parentesi; ti spiego perché: l'Object Inspector ha la ricerca incrementale, se premi TAB e cominci a digitare il nome di una proprietà, ti sposti su di essa... premi INVIO e modifica il valore della proprietà e il gioco è fatto.

Una volta abituato, vai a scheggia senza problemi.


Originariamente inviato da kentaromiura
4) Esistono fonti delphi con articoli e novita?

Ce ne sono a migliaia.
Il sito che consulto più frequentemente è About Delphi Programming (http://delphi.about.com).


Originariamente inviato da kentaromiura
[OT]
ieri ho connesso tramite FBEmbed.dll un applicativo a una tabella fdb ,
ho impostato nella connection la vendorlib come fbembed.dll,e l'ho attivata
poi ho usato una TQuery che si riferiva alla connection ,
poi ho usato un TDataset che puntava al Tquery parametrizzato e infine un
TDBListbox che faceva riferimento al dataset,
ho impostato la tabella di riferimento e nel momento di impostare il campo (mentre cliccavo sul nome del campo restituito dalla Tquery)delphi si e' chiuso,
naturalmente senza salvare le varie modifiche.. :dhò: :dhò:
Spero che i componenti usati, in realtà, siano TSQLQuery o TSQLDataSet, mentre TDataSource per stabilire il collegamento tra sorgente dati e controllo "data aware".

Ciao! :ciauz:

kentaromiura
09-03-2006, 14:12
Ciao, ORSO :D!

Originariamente inviato da alka
Si usa Self. Ricorda che Delphi è un linguaggio misto procedurale/OOP, quindi Self è presente solo dove ha senso, cioè nei metodi appartenenti ad una classe, e non nelle procedure/funzioni statiche sparse all'interno di una unit.

Perfettamente dove mi aspettavo self funzionasse(ovvero dove ho già l'istanza di una classe, OVVIO che in una funzione/procedura statica non ha senso poiche' non esiste l'istanziazione della classe) ma dentro ad una procedure non lo beccava(almeno l'ide,poi non ho provato a compilare..puo darsi avesse cannato solo in quel momento..)


Sembra "mescolata bene", ma in realtà è più facilmente reperibile che in VS dove inizia con una parentesi; ti spiego perché: l'Object Inspector ha la ricerca incrementale, se premi TAB e cominci a digitare il nome di una proprietà, ti sposti su di essa... premi INVIO e modifica il valore della proprietà e il gioco è fatto.

Una volta abituato, vai a scheggia senza problemi.

ecco, sta cosa del tab non la sapevo ... utilissima!


Ce ne sono a migliaia.
Il sito che consulto più frequentemente è About Delphi Programming (http://delphi.about.com).

daro' un occhiata, grazie!


Spero che i componenti usati, in realtà, siano TSQLQuery o TSQLDataSet, mentre TDataSource per stabilire il collegamento tra sorgente dati e controllo "data aware".

Ciao! :ciauz:
certo ma mica potevo ricordarmi il nome a memoria :dottò:

alka
09-03-2006, 14:54
Originariamente inviato da kentaromiura
Perfettamente dove mi aspettavo self funzionasse(ovvero dove ho già l'istanza di una classe, OVVIO che in una funzione/procedura statica non ha senso poiche' non esiste l'istanziazione della classe) ma dentro ad una procedure non lo beccava(almeno l'ide,poi non ho provato a compilare..puo darsi avesse cannato solo in quel momento..)

E' possibile che ci fosse un errore nella dichiarazione della classe o da qualche altra parte del codice; in certi casi, questo impedisce al parser di interpretare correttamente il tipo di dato e di restituirne quindi i membri.

Ci sono tantissimi altri shortcut che si possono utilizzare nel Code Editor di estrema utilità: ad esempio, per inserire un nuovo metodo in una classe, è sufficiente digitarlo nella dichiarazione e premere CTRL+SHIFT+C per crearne il corpo; con le funzionalità di Refactoring, poi, si rinominano e si modificano i membri in scioltezza senza intervenire su dichiarazione e implementazione manualmente.


Originariamente inviato da kentaromiura
certo ma mica potevo ricordarmi il nome a memoria :dottò:
Era solo per essere sicuro: qualsiasi scelta tu faccia, evita i componenti che hai menzionato e dimentica i componenti BDE. :zizi:

Ciao! :ciauz:

kentaromiura
10-03-2006, 12:46
piccolo aggiornamento:

Si vede che FB Embed ha seri problemi con l'ide,
esempio, usando i componenti che mi hai consigliato
quando dopo aver aperto una connessione (TSqlConnection se non erro)
la chiudo si chiude l'ide,


inoltre connettendomi con un dataset non vedo nulla anche se la tabella contiene righe,
la cosa bella e' che pero' i campi quando vado a impostare la TDBListbox me li vede correttamente,
ma non me la popola..quindi legge la struttura del database(quindi fbembed.dll funziona) ma null'altro...
ho provato anche ad usare gds32.dll
e nulla.. non e' che devo fare il databinding a manina??
boh??
dovro' riprovare con la TQuery e vedere se funziona...

alka
10-03-2006, 12:53
Per quel che riguarda i problemi di connessione, bisognerebbe fare qualche verifica di compatibilità con la versione Embedded di FireBird dell'ultimo driver dbExpress che è quello incluso in BDS2006. Stasera farò qualche prova se ho un attimo, anche se recentemente ho modificato e lavorato correttamente con un'applicazione che però usava il classico server, benché sia (quasi) convinto che non vi siano differenze a livello di driver o che i problemi non siano derivanti dal diverso tipo di server (classico o embedded) sottostante.

Per quanto riguarda l'uso di controlli "data aware" come il TDBListBox e problematiche di "data binding", occorre tenere ben presente lo scopo per cui ciascun controllo è progettato. Un esempio: se ti aspetti di vedere la TDBListBox popolata da record, non la vedrai mai in quanto non è lo scopo di quel controllo che, invece, può essere associato ad un campo da cui leggerne e rappresentarne visualmente il valore selezionando uno degli elementi presenti al suo interno, definiti con la proprietà Items, e precisamente quello che coincide con il valore del campo.

Per dirla in breve, la TDBListBox non elenca una serie di record mostrando al suo interno tutti i valori di un campo.

Ciao! :ciauz:

kentaromiura
10-03-2006, 13:02
Originariamente inviato da alka
Per quel che riguarda i problemi di connessione, bisognerebbe fare qualche verifica di compatibilità con la versione Embedded di FireBird dell'ultimo driver dbExpress che è quello incluso in BDS2006. Stasera farò qualche prova se ho un attimo, anche se recentemente ho modificato e lavorato correttamente con un'applicazione che però usava il classico server, benché sia (quasi) convinto che non vi siano differenze a livello di driver o che i problemi non siano derivanti dal diverso tipo di server (classico o embedded) sottostante.

Per quanto riguarda l'uso di controlli "data aware" come il TDBListBox e problematiche di "data binding", occorre tenere ben presente lo scopo per cui ciascun controllo è progettato. Un esempio: se ti aspetti di vedere la TDBListBox popolata da record, non la vedrai mai in quanto non è lo scopo di quel controllo che, invece, può essere associato ad un campo da cui leggerne e rappresentarne visualmente il valore selezionando uno degli elementi presenti al suo interno, definiti con la proprietà Items, e precisamente quello che coincide con il valore del campo.

Per dirla in breve, la TDBListBox non elenca una serie di record mostrando al suo interno tutti i valori di un campo.

Ciao! :ciauz:
appunto ma in ITEMS io vedo il campo DESCRIZIONE :zizi:
solo che non fa il BINDING :zizi:

alka
10-03-2006, 13:20
Originariamente inviato da kentaromiura
appunto ma in ITEMS io vedo il campo DESCRIZIONE :zizi:
solo che non fa il BINDING :zizi:
La proprietà Items del controllo TDBListBox è del tutto identica a quella del comune TListBox (non associato ai dati)... come fai a vederci dentro un campo DESCRIZIONE?
:master:

Per effettuare il "binding" del controllo al campo associato, basta valorizzare le proprietà DataSource e DataField.

Ciao! :ciauz:

kentaromiura
10-03-2006, 14:19
Originariamente inviato da alka
La proprietà Items del controllo TDBListBox è del tutto identica a quella del comune TListBox (non associato ai dati)... come fai a vederci dentro un campo DESCRIZIONE?
:master:

Per effettuare il "binding" del controllo al campo associato, basta valorizzare le proprietà DataSource e DataField.

Ciao! :ciauz:
mi sono spiegato male in datasource ho associato il datasource,
mentre DataField e' uguale a DESCRIZIONE (me l'ha rilevato l'ide, quindi la struttura della tabella la legge)..

solo che sia nell'ide, che a runtime e' VUOTA mentre dovrebbe avere una riga con scritto "Utente di prova"
:dottò:

kentaromiura
10-03-2006, 14:27
non e' che devo inserire
dbexpint.dll
nella directory dell'eseguibile?? :dottò:
stasera proverò..

Loading