tutorial cocoa odbc and mysql
TRANSCRIPT
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
1 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
2 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
3 di 92 16.05.2011 15:23
1) Creazione del DataBase e delle Tabelle
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
4 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
5 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
6 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
7 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
8 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
9 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
10 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
11 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
12 di 92 16.05.2011 15:23
2) CREAZIONE DELLA CONNESSIONE ODBC
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
13 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
14 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
15 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
16 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
17 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
18 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
19 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
20 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
21 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
22 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
23 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
24 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
25 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
26 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
27 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
28 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
29 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
30 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
31 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
32 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
33 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
34 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
35 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
36 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
37 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
38 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
39 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
40 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
41 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
42 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
43 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
44 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
45 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
46 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
47 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
48 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
49 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
50 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
51 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
52 di 92 16.05.2011 15:23
beginSheet,
[NSApp beginSheet:personaPanel modalForWindow:[NSApp mainWindow] modalDelegate:self
didEndSelector:@selector(sheetDidEnd: returnCode: contextInfo:) contextInfo:NULL];
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
53 di 92 16.05.2011 15:23
- (IBAction)chiudeSheet:(id)sender; //Action for close the panel
- (IBAction)chiudeSheet:(id)sender{
//Chiudo la finestra
[personaPanel orderOut:nil];
[NSApp endSheet:personaPanel];
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
54 di 92 16.05.2011 15:23
}
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
55 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
56 di 92 16.05.2011 15:23
int nOperationToDo=0; nOperationToDo=[sender selectedSegment];
if(nOperationToDo == 4){
[personaPanel orderOut:nil]; [NSApp endSheet:personaPanel];
}
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
57 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
58 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
59 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
60 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
61 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
62 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
63 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
64 di 92 16.05.2011 15:23
- (IBAction)chiudeSheet:(id)sender; //Action for close the panel
e sposto implementazione nella nuova classe, nel metodo
- (IBAction)btnBarraAzionePremuto:(id)sender{
//Chiudo la finestra
int nOperationToDo=0;
nOperationToDo=[sender selectedSegment]; //Get the Button That is selected on the segment
if(nOperationToDo == kBtnEsci){ //If ESCI close sheet
[personaPanel orderOut:nil]; //Close the panel
[NSApp endSheet:personaPanel ]; //End the sheet loop }
}
#import <gstregaliapp.h>
panelPersoneController l’oggetto Panel che rappresenta il nostro sheet.
-
(IBAction)btnBarraAzionePremuto:(id)sender
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
65 di 92 16.05.2011 15:23
id aPanel=[sender window];
if(nOperationToDo == 4){ //If ESCI close sheet
[aPanel orderOut:nil]; //Close the panel
[NSApp endSheet:aPanel ]; //End the sheet loop }
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
66 di 92 16.05.2011 15:23
-
-
-
- (IBAction)btnModificaPremuto:(id)sender
{
//1: Check if key field is valid
NSString *aString=[[idPersona stringValue] TrimRight]; //Eliminate right blanks
if([aString isEqualToString:@""]){
NSRunAlertPanelRelativeToWindow(@"ERRORE",@"E' Indispensabile indicare un identificativo della persona!",@"OK",nil,nil,[sender
window]);
}
}
if([aString length] >25){
NSRunAlertPanelRelativeToWindow(@"ERRORE",@"L'identificativo non puo' essere superiore a 25 caratteri!",@"OK",nil,nil,[sender
window]);}
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
67 di 92 16.05.2011 15:23
pTabPersone
NSMutableString *strQuery;
strQuery=[NSMutableString stringWithFormat:@"WHERE ID_PERSONA='%@' ",aString]; //Build the query
if([theApp->pTabPersone LoadDati:strQuery] == TRUE){ NSLog(@"Found: %@ in table PERSONE",aString);
}else{
NSLog(@"Not Found: %@ in table PERSONE",aString);
}
- (IBAction)btnModificaPremuto:(id)sender
{
//1: Check if key field is validNSString *aString=[[idPersona stringValue] TrimRight]; //Eliminate right blanks
if([aString isEqualToString:@""]){
NSRunAlertPanelRelativeToWindow(@"ERRORE",@"E' Indispensabile indicare un identificativo della persona!",@"OK",nil,nil,[senderwindow]);
}
if([aString length] >25){ NSRunAlertPanelRelativeToWindow(@"ERRORE",@"L'identificativo non puo' essere superiore a 25 caratteri!",@"OK",nil,nil,[sender
window]);
}
//2: Check if record already present
NSMutableString *strQuery;
strQuery=[NSMutableString stringWithFormat:@"WHERE ID_PERSONA='%@' ",aString]; //Build the query
if([theApp->pTabPersone LoadDati:strQuery] == TRUE){
NSLog(@"Found: %@ in table PERSONE",aString);
}else{ NSLog(@"Not Found: %@ in table PERSONE",aString);
}
}
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
68 di 92 16.05.2011 15:23
/* gstregaliapp */
#import <Cocoa/Cocoa.h>
#import "FGODBCConnection.h"
#import "FGODBCRecord.h"
@interface gstregaliapp : NSObject
{
FGODBCConnection *m_DB; //ODBC Connection to the DataBase
@public
FGODBCRecord *pTabPersone; //DB Table PERSONE
FGODBCRecord *pTabRegali; //DB Table REGALI
FGODBCRecord *pTabRicorrenze; //DB Table RICORRENZE FGODBCRecord *pTabStoricoRegali; //DB Table STORICOREGALI
}
@end
- (IBAction)btnBarraAzionePremuto
nOperationToDo = 0
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
69 di 92 16.05.2011 15:23
-(void)updateRecord; //Update Record
//Update Record
-(void)updateRecord{
NSMutableString *strQuery;NSString *aString=[[idPersona stringValue] TrimRight]; //Eliminate right blanks
strQuery=[NSMutableString stringWithFormat:@"WHERE ID_PERSONA='%@' ",aString]; //Build the query
BOOL sts=[theApp->pTabPersone LoadDati:strQuery]; //New Insert or Update ?
//Assign new data value for the record
[[theApp->pTabPersone FieldInfo:@"ID_PERSONA"] SetValue:aString];
[[theApp->pTabPersone FieldInfo:@"DESCR"] SetValue:[descrizione stringValue]]; [[theApp->pTabPersone FieldInfo:@"ETA"] SetValue:[eta stringValue]]; //Int
[[theApp->pTabPersone FieldInfo:@"HOBBY"] SetValue:[hobby stringValue]];
[[theApp->pTabPersone FieldInfo:@"SPORT"] SetValue:[sport stringValue]];
if([flgSingle state]==TRUE) [[theApp->pTabPersone FieldInfo:@"SINGLE"] SetValue:@"1"];
else
[[theApp->pTabPersone FieldInfo:@"SINGLE"] SetValue:@"0"];
[[theApp->pTabPersone FieldInfo:@"NATOIL"] SetValue:[[dataNascita dateValue] descriptionWithCalendarFormat:@"%Y%m%d"timeZone:nil locale:nil]]; //data YYYYMMDD
[[theApp->pTabPersone FieldInfo:@"BUDGET"] SetValue:[budget stringValue]]; //real
//If not exist make a INSERT else a UPDATE if(sts==FALSE)
[theApp->pTabPersone Insert];
else
[theApp->pTabPersone Update:strQuery];
}
FieldInfo
FGODBCFieldInfo
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
70 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
71 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
72 di 92 16.05.2011 15:23
FGODBCResultSet *dsPersone; //DataSource PERSONE
-(void) awakeFromNib{
dsPersone=[[FGODBCResultSet alloc] init:theApp SetIdentifier:@"PERSONE" tableView:elencoPersone];}
- (void)windowDidBecomeKey:(NSNotification *)aNotification
e per intercettare tale messaggio devo dire tramite interface builder che la classe panelPersoneController è anche la
classe DELEGATA per il Panel PersonePanel.
Apriamo IB con doppio click su MainMenu.NIB, quindi CTRL click sull’oggetto PersonaPanel e tascinando click su
oggetto personaPanelController, seleziono DELEGATE e CONNECT.
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
73 di 92 16.05.2011 15:23
Mentre siamo in IB sistemiamo ancora una cosetta, ossia per poter funzionare il mio oggetto FGODBCResultSet ha
bisogno che l’IDENTIFIER della colonna della tableview si chiami esattamente come si chiama il campo nella tabella
del Database. Esempio La colonna Id persona deve avere Identifier = ID_PERSONA
La colonna descrizione deve avere Identifier DESCR ecc.
Doppio click sull’intestazione della tabella
compare (se non compare )
e faccio la stessa operazione per tutte le altre colonne
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
74 di 92 16.05.2011 15:23
Salvo le modifiche e chiudo IB.
Creiamo i metodi per popolare il datasource ed assegnarlo alla table view e richiamiamolo nel messaggio
windowDidBecomeKey (lo faccio solo una volta)
- (void)windowDidBecomeKey:(NSNotification *)aNotification{ static int bOnlyOnce=0;
if(!bOnlyOnce){
[self startUseDataSource];
bOnlyOnce=1; }
}
-(void) startUseDataSource{
[elencoPersone setDataSource:nil]; //Forzo il riaggiornamento del datasource per la tableview //Execute the query for dataset result [dsPersone FillArray:theApp->pTabPersone SqlFilter:@"order by ID_PERSONA" ProgressInd:nil];
//Set datasource to tableview
[elencoPersone setDataSource:dsPersone];
}
e nel file .h
-(void) startUseDataSource; //Start using internal datasource for tableview
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
75 di 92 16.05.2011 15:23
Compiliamo e mandiamo in esecuzione, se tutto è OK quando selezioniamo tabelle di base e persone compare
Proviamo ad inseire un nuovo record
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
76 di 92 16.05.2011 15:23
dopo aver premuto registra, il nuovo record non compare nell’elenco, questo è ovvio visto che abbiamo detto di
riempire il datasource solo quando la finestra viene aperta, infatti se chiudo e riapro trovo il nuovo record.
Per riaggiornare l’elenco è sufficiente aggiungere la chiamata al metodo startUseDataSource dopo l’update del record
if(nOperationToDo == 0){ //REGISTRA was pressed Insert/Modify the record [self updateRecord];
[self startUseDataSource]; //refresh datasource
}
Procediamo con la cancellazione
Creiamo un nuovo metodo nel file .h
-(void)deleteRecord; //Delete record
e lo implementiamo nel file .m
//Delete Record
-(void)deleteRecord{NSMutableString *strQuery;
NSString *aString=[[idPersona stringValue] TrimRight]; //Eliminate right blanks
strQuery=[NSMutableString stringWithFormat:@"WHERE ID_PERSONA='%@' ",aString]; //Build the query[theApp->pTabPersone Delete:strQuery];
}
Ovviamente dobbiamo aggiungere il codice per intercettare il tasto Cancella
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
77 di 92 16.05.2011 15:23
if(nOperationToDo == 1){ //CANCELLA was pressed Delete the record
[self deleteRecord];
[self startUseDataSource]; //refresh datasource
}
chiamiamo il metodo per cancellare il dato e faccio il refresh dell’elenco.
Per provare se funziona occorre indicare ID PERSONA da cancellare e premere Cancella, scompare dall’elenco.
Cancellazione Totale di tutti i record presenti
Creiamo il metodo nel file .h
-(void)deleteAllRecords; //Delete all records
e lo implementiamo nel seguente modo
//Delete all records
-(void)deleteAllRecords{
[theApp->pTabPersone Delete:@""];}
Infine modifichiamo il codice per intercettare il tasto Elimina tutto
if(nOperationToDo == 2){ //ELIMINA TUTTI was pressed Delete all records
[self deleteAllRecords];
[self startUseDataSource]; //refresh datasource }
STAMPA ELENCO
Semplicemente chiamiamo il metodo print dell’oggetto tableview, questo quando intercettiamo il tasto Stampa
if(nOperationToDo == 3){ //STAMPA was pressed Print all records
[elencoPersone print:self]; }
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
78 di 92 16.05.2011 15:23
Giunti a questo punto, abbiamo fatto il lavoro piu’ grosso e praticamente abbiamo toccato tutti i punti per poter
interfacciare MySql server.
Ora faremo solo delle operazioni per migliorare la gestione da parte dell’utente, esempio delle conferme sulla
cancellazione dati, abilitare i campi sono dopo aver premuto modifca e sistemare la visualizzazione della data.
Infine faremo in modo che facendo un doppio click sulla riga della tablebview venga automaticamente selezionato il
record pronto per la variazione dati.
Mettiamoci al lavoro, attiviamo la conferma sulla cancellazione datiif(nOperationToDo == 1){ //CANCELLA was pressed Delete the record NSString *strInfo;
strInfo=[NSString stringWithFormat:@"E' stato scelto di cancellare %@. Confermi ?",[[idPersona stringValue]TrimRight]];
int rc=NSRunAlertPanel(@"Attenzione!",strInfo,@"SI",@"NO",nil);
if(rc==NSOKButton){ [self deleteRecord];
[self startUseDataSource]; //refresh datasource }
}
per la cancellazione singola
Mentre per la cancellazione totale,if(nOperationToDo == 2){ //ELIMINA TUTTI was pressed Delete all records NSString *strInfo;
strInfo=[NSString stringWithString:@"E' stato scelto di eliminare tutti i records. Confermi ?"];
int rc=NSRunAlertPanel(@"Attenzione!",strInfo,@"SI",@"NO",nil);
if(rc==NSOKButton){ [self deleteAllRecords];
[self startUseDataSource]; //refresh datasource
}
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
79 di 92 16.05.2011 15:23
}
ABILITIAMO I CAMPI SOLO DOPO AVER PREMUTO MODIFICA
Qui c’e’ un po’ di lavoro da fare, creo un metodo che abilita/disabilita tutti i campi di immissione utente tranne il
campo chiave (o meglio, lavora nel modo opposto, inizialmente il campo ID PERSONA è attivo ed il pulsante Modifica
anche) mentre tutti gli altri campi sono disabilitati, dopo aver premuto modifica, inverto la situazione).
//enable/disable control in user interface
-(void)setCtrlStat:(BOOL) bSts{
[idPersona setEnabled:bSts];
[budget setEnabled:!bSts]; [descrizione setEnabled:!bSts];
[dataNascita setEnabled:!bSts];
[eta setEnabled:!bSts];
[flgSingle setEnabled:!bSts]; [sport setEnabled:!bSts];
[hobby setEnabled:!bSts];
[flgSingle setEnabled:!bSts];
}
Chiamo questo metodo in diverse parti del codice, impostando bSts a TRUE o FALSE a seconda delle esigenze.
-(void) awakeFromNib{
dsPersone=[[FGODBCResultSet alloc] init:theApp SetIdentifier:@"PERSONE" tableView:elencoPersone];
[self setCtrlStat:TRUE]; //enable/disable control in user interface
}
if(nOperationToDo == 0){ //REGISTRA was pressed Insert/Modify the record
[self updateRecord];
[self startUseDataSource]; //refresh datasource
[self setCtrlStat:TRUE];
}
- (IBAction)btnModificaPremuto:(id)sender{
//1: Check if key field is valid
NSString *aString=[[idPersona stringValue] TrimRight]; //Eliminate right blanks
if([aString isEqualToString:@""]){
NSRunAlertPanel(@"ERRORE",@"E' Indispensabile indicare un identificativo della persona!",@"OK",nil,nil);
}
if([aString length] >25){
NSRunAlertPanel(@"ERRORE",@"L'identificativo non puo' essere superiore a 25 caratteri!",@"OK",nil,nil);
}
//2: Check if record already present
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
80 di 92 16.05.2011 15:23
NSMutableString *strQuery;
strQuery=[NSMutableString stringWithFormat:@"WHERE ID_PERSONA='%@' ",aString]; //Build the query
if([theApp->pTabPersone LoadDati:strQuery] == TRUE){
NSLog(@"Found: %@ in table PERSONE",aString);
}else{
NSLog(@"Not Found: %@ in table PERSONE",aString);}
[self setCtrlStat:FALSE];
}
ecc.
Una particolare attenzione va posta per la barra dei pulsanti azione, in quanto sono se ho un valore valido nel campo Id
Persona ed è stato premuto modifica, devo rendere disponibili i pulsanti Registra e Cancella. Quindi modifico setCtrlStat…
[pulsantiAzione setEnabled:!bSts forSegment:0]; //Enable/Disable REGISTRA
[pulsantiAzione setEnabled:!bSts forSegment:1]; //Enable/Disable CANCELLA
Per completare questa parte, mi serve un OutLet per il pulsante Modifica in modo da poterlo abilitare/disabilitare nella
funzione setCtrlStat.
Ok, lo creo nella classe .h
IBOutlet NSButton *btnModifica;
modifico setCtrlStat, e poi creo l’outlet in IB e lo collego.
Modifico il codice in setCtrlStat
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
81 di 92 16.05.2011 15:23
[btnModifica setEnabled:bSts];
Compilo e provo.
Ora occupiamoci di visualizzare i dati nei campi, nel caso di una variazione dati. Prima di tutto aggiungo al progetto i
files FGBseData.h e .m
E’ una classe che utilizzo per trasformare comodamente una stringa nel formato “AAAAMMGG” in una NSDate e per
fare altre varie operazioni sulle date in un modo a me piu’ famigliare.
Dato che nel nostro record c’e’ una data (NATOIL), uso questa mia classe.
I files sono nella cartella
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
82 di 92 16.05.2011 15:23
Ora modifichiamo il codice relativo al pulsante Modifica premuto, in modo da leggere i dati presenti nel record e di
presentarli nei rispettivi campi a video nel caso di variazione dati oppure di ripulire i campi nel caso di nuovo
inserimento.
- (IBAction)btnModificaPremuto:(id)sender
{
//1: Check if key field is valid
NSString *aString=[[idPersona stringValue] TrimRight]; //Eliminate right blanks
if([aString isEqualToString:@""]){
NSRunAlertPanel(@"ERRORE",@"E' Indispensabile indicare un identificativo della persona!",@"OK",nil,nil);
return;
}
if([aString length] >25){
NSRunAlertPanel(@"ERRORE",@"L'identificativo non puo' essere superiore a 25 caratteri!",@"OK",nil,nil);
return;}
//2: Check if record already present
NSMutableString *strQuery;strQuery=[NSMutableString stringWithFormat:@"WHERE ID_PERSONA='%@' ",aString]; //Build the query
if([theApp->pTabPersone LoadDati:strQuery] == TRUE){
NSLog(@"Found: %@ in table PERSONE",aString); //Update info in user interface
[descrizione setStringValue:[[theApp->pTabPersone FieldInfo:@"DESCR"] GetValue]];
[eta setStringValue:[[theApp->pTabPersone FieldInfo:@"ETA"] GetValue]];
[hobby setStringValue:[[theApp->pTabPersone FieldInfo:@"HOBBY"] GetValue]]; [sport setStringValue:[[theApp->pTabPersone FieldInfo:@"SPORT"] GetValue]];
[budget setStringValue:[[theApp->pTabPersone FieldInfo:@"BUDGET"] GetValue]];
[flgSingle setState:[[[theApp->pTabPersone FieldInfo:@"SINGLE"] GetValue] intValue]];
FGBseData *aDate=[[FGBseData alloc] init]; [aDate SetDataR:[[theApp->pTabPersone FieldInfo:@"NATOIL"] GetValue]];
[dataNascita setDateValue:[aDate GetCalendarDate]];
[aDate release];}else{
NSLog(@"Not Found: %@ in table PERSONE",aString);
//New record, clear fields
[descrizione setStringValue:@""]; [eta setStringValue::@""];
[hobby setStringValue::@""];
[sport setStringValue::@""];
[budget setStringValue::@""]; [flgSingle setState:FALSE];
}
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
83 di 92 16.05.2011 15:23
[self setCtrlStat:FALSE];
}
Esaminiamo una parte del codice,
[descrizione setStringValue:[[theApp->pTabPersone FieldInfo:@"DESCR"] GetValue]];
il questo caso imposto il valore del controllo descrizione con il valore che ho nel record attualmente selezionato
(abbiamo fatto in precedenza una LoadDati…) ed estraggo il valore (GetValue) relativo al campo del record che ha
nome “DESCR” (E’ quindi il nome della colonna della tabella Persone del nostro database).
La stessa cosa si ripete per gli altri campi; diverso è invece il modo di impostare il flag Singolo (e’ un check box) e la
data del compleanno (e’ un NsdatePicker)
Per il check box
[flgSingle setState:[[[theApp->pTabPersone FieldInfo:@"SINGLE"] GetValue] intValue]];
ricavo il valore del campo SINGLE (che vale “0” o “1”), lo trasformo in INT e lo passo al metodo setState del
controllo check box button.
Per la data, uso la classe FGBseData
FGBseData *aDate=[[FGBseData alloc] init]; //Creo l’oggetto dinamicamente
//Chiamo il metodo che mi consente di impostare la data usando una stringa nel
//formato “AAAAMMGG”, che è quello che uso per la registrazione dati sulle mie tabelle di //database
[aDate SetDataR:[[theApp->pTabPersone FieldInfo:@"NATOIL"] GetValue]];
//Imposto il controllo NSDatePicker con il nuovo valore di data, ricavato usando il metodo GetCalendarDate del mio oggetto FGBseData
[dataNascita setDateValue:[aDate GetCalendarDate]];
[aDate release]; //Libero la memoria allocata dalla “alloc”
SISTEMIAMO LA VISUALIZZAZIONE DELLA DATA NELLA TABLEVIEW
Modifico il codice nella FGODBCResultSet
if([colID isEqualToString:@"NATOIL"]){ //Date...
ovviamente, se abbiamo altre tabelle con campi dati, dovremo aggiungere gli altri nomi dei campi
Ecco il risultato,
ATTIVIAMO IL DOPPIO CLICK SULLA TABLEVIEW per selezionare i dati indicati
Per prima cosa, da IB dobbiamo disattivare l’opzione Editable su ciascuna colonna della nostra TableView (dobbio
click su intestazione colonna e togliamo la casella di spunta dalla voce Editable).
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
84 di 92 16.05.2011 15:23
salviamo e chiudiamo Interface Builder.
Ora andiamo a dire alla nostra tableview che vogliamo far eseguire un determinato metodo quando si effettua il doppio
click su una riga
-(void) awakeFromNib{
dsPersone=[[FGODBCResultSet alloc] init:theApp SetIdentifier:@"PERSONE" tableView:elencoPersone];
[self setCtrlStat:TRUE]; //enable/disable control in user interface
[elencoPersone setTarget:self];
[elencoPersone setDoubleAction:@selector(loadSelectedData)]; //Double click
}
In pratica si tratta di impostare il metodo setDoubleAction della tableview, indicando quale è il metodo della nostra
classe che vogliamo sia richiamato quando l’utente effettua un doppio click. (loadSelectedData)
Dato che il metodo che ho deciso di chiamare loadSelectedData è un metodo della classe panelPersoneController
imposto il setTarget su self
Ora implemento il metodo nella classe panelPersoneController
Nel file .h//Double click action-(void)loadSelectedData;
Nel file .m
//Double click action-(void)loadSelectedData{
int nSelectedRow=[elencoPersone clickedRow];
FGODBCRecord *tmpRecord=[dsPersone GetSingleRow:nSelectedRow];
//Update info in user interface
[idPersona setStringValue:[[tmpRecord FieldInfo:@"ID_PERSONA"] GetValue]];
[descrizione setStringValue:[[tmpRecord FieldInfo:@"DESCR"] GetValue]];
[eta setStringValue:[[tmpRecord FieldInfo:@"ETA"] GetValue]]; [hobby setStringValue:[[tmpRecord FieldInfo:@"HOBBY"] GetValue]];
[sport setStringValue:[[tmpRecord FieldInfo:@"SPORT"] GetValue]];
[budget setStringValue:[[tmpRecord FieldInfo:@"BUDGET"] GetValue]]; [flgSingle setState:[[[tmpRecord FieldInfo:@"SINGLE"] GetValue] intValue]];
FGBseData *aDate=[[FGBseData alloc] init];
[aDate SetDataR:[[tmpRecord FieldInfo:@"NATOIL"] GetValue]];
[dataNascita setDateValue:[aDate GetCalendarDate]]; [aDate release];
[self setCtrlStat:FALSE];
}
Il nuovo metodo loadSelectedData appena implementato deve
1) ricavare il numero della riga su cui l’utente ha fatto doppio click
2) ricavare i dati del record corrispondente
3) visualizzare i dati nei campi dell’interfaccia utente
4) aggiornare situazione dello stato dei controlli
1) int nSelectedRow=[elencoPersone clickedRow]; //ricavo la riga selezionata
2) FGODBCRecord *tmpRecord=[dsPersone GetSingleRow:nSelectedRow]; //il mio datasource non è altro che un
array du FGODBCRecord, quindi chiedo di restituirmi il record numero nSelectedRow
3) [idPersona setStringValue:[[tmpRecord FieldInfo:@"ID_PERSONA"] GetValue]]; //ricavo il dato relativo al
campo indicato
4) [self setCtrlStat:FALSE]; //aggiorna situazione pulsanti e campi di immissione
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
85 di 92 16.05.2011 15:23
Il mio tutorial è quindi finito, abbiamo visto come inferfacciare MySql con una applicazione Cocoa, e gestire una
tabelle (PERSONE) in modo completo, effettuando l’immissione, la variazione, la cancellazione, la stampa, la
visualizzazione e la selezione dalla visualizzazione.
Spero di essere stato sufficientemente chiaro ed esauriente.
Per qualsiasi ulteriore informazione, suggerimento, correzione, implementazione, traduzione ecc. non esisate a
contattarmi.
Grazie per l’attenzione dedicata e grazie nuovamente alla Actual Technologies
Per avermi concesso l’uso di una licenza trial di 15 giorni del loro driver ODBC.
Nel file zip che accompagna questo tutorial troverete tutto il materiale che ho usato io per la realizzazione di questo
tutorial.
Saluti.
Franceso Germinara
www.germinara.it
Ecco come si presenta la videata della gestione delle Persone alla fine
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
86 di 92 16.05.2011 15:23
Ideato, scritto e realizzato da Francesco Germinara
7/8 dicembre 2005 Pinerolo, Torino - Italy
In allegato c’e’ l’applicazione completa ecco le videate
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
87 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
88 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
89 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
90 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
91 di 92 16.05.2011 15:23
Tutorial Cocoa, Odbc and MySql - Ideato e scritto da Francesco Germinara http://www.germinara.it/download/tutorial_MySQLODBC.htm
92 di 92 16.05.2011 15:23