tutorial cocoa odbc and mysql

92
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

Upload: ital

Post on 29-Nov-2014

73 views

Category:

Documents


12 download

TRANSCRIPT

Page 1: Tutorial Cocoa Odbc and MySql

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

Page 2: Tutorial Cocoa Odbc and MySql

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

Page 3: Tutorial Cocoa Odbc and MySql

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

Page 4: Tutorial Cocoa Odbc and MySql

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

Page 5: Tutorial Cocoa Odbc and MySql

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

Page 6: Tutorial Cocoa Odbc and MySql

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

Page 7: Tutorial Cocoa Odbc and MySql

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

Page 8: Tutorial Cocoa Odbc and MySql

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

Page 9: Tutorial Cocoa Odbc and MySql

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

Page 10: Tutorial Cocoa Odbc and MySql

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

Page 11: Tutorial Cocoa Odbc and MySql

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

Page 12: Tutorial Cocoa Odbc and MySql

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

Page 13: Tutorial Cocoa Odbc and MySql

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

Page 14: Tutorial Cocoa Odbc and MySql

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

Page 15: Tutorial Cocoa Odbc and MySql

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

Page 16: Tutorial Cocoa Odbc and MySql

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

Page 17: Tutorial Cocoa Odbc and MySql

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

Page 18: Tutorial Cocoa Odbc and MySql

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

Page 19: Tutorial Cocoa Odbc and MySql

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

Page 20: Tutorial Cocoa Odbc and MySql

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

Page 21: Tutorial Cocoa Odbc and MySql

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

Page 22: Tutorial Cocoa Odbc and MySql

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

Page 23: Tutorial Cocoa Odbc and MySql

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

Page 24: Tutorial Cocoa Odbc and MySql

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

Page 25: Tutorial Cocoa Odbc and MySql

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

Page 26: Tutorial Cocoa Odbc and MySql

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

Page 27: Tutorial Cocoa Odbc and MySql

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

Page 28: Tutorial Cocoa Odbc and MySql

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

Page 29: Tutorial Cocoa Odbc and MySql

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

Page 30: Tutorial Cocoa Odbc and MySql

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

Page 31: Tutorial Cocoa Odbc and MySql

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

Page 32: Tutorial Cocoa Odbc and MySql

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

Page 33: Tutorial Cocoa Odbc and MySql

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

Page 34: Tutorial Cocoa Odbc and MySql

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

Page 35: Tutorial Cocoa Odbc and MySql

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

Page 36: Tutorial Cocoa Odbc and MySql

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

Page 37: Tutorial Cocoa Odbc and MySql

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

Page 38: Tutorial Cocoa Odbc and MySql

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

Page 39: Tutorial Cocoa Odbc and MySql

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

Page 40: Tutorial Cocoa Odbc and MySql

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

Page 41: Tutorial Cocoa Odbc and MySql

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

Page 42: Tutorial Cocoa Odbc and MySql

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

Page 43: Tutorial Cocoa Odbc and MySql

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

Page 44: Tutorial Cocoa Odbc and MySql

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

Page 45: Tutorial Cocoa Odbc and MySql

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

Page 46: Tutorial Cocoa Odbc and MySql

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

Page 47: Tutorial Cocoa Odbc and MySql

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

Page 48: Tutorial Cocoa Odbc and MySql

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

Page 49: Tutorial Cocoa Odbc and MySql

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

Page 50: Tutorial Cocoa Odbc and MySql

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

Page 51: Tutorial Cocoa Odbc and MySql

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

Page 52: Tutorial Cocoa Odbc and MySql

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

Page 53: Tutorial Cocoa Odbc and MySql

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

Page 54: Tutorial Cocoa Odbc and MySql

- (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

Page 55: Tutorial Cocoa Odbc and MySql

}

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

Page 56: Tutorial Cocoa Odbc and MySql

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

Page 57: Tutorial Cocoa Odbc and MySql

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

Page 58: Tutorial Cocoa Odbc and MySql

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

Page 59: Tutorial Cocoa Odbc and MySql

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

Page 60: Tutorial Cocoa Odbc and MySql

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

Page 61: Tutorial Cocoa Odbc and MySql

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

Page 62: Tutorial Cocoa Odbc and MySql

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

Page 63: Tutorial Cocoa Odbc and MySql

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

Page 64: Tutorial Cocoa Odbc and MySql

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

Page 65: Tutorial Cocoa Odbc and MySql

- (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

Page 66: Tutorial Cocoa Odbc and MySql

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

Page 67: Tutorial Cocoa Odbc and MySql

-

-

-

- (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

Page 68: Tutorial Cocoa Odbc and MySql

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

Page 69: Tutorial Cocoa Odbc and MySql

/* 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

Page 70: Tutorial Cocoa Odbc and MySql

-(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

Page 71: Tutorial Cocoa Odbc and MySql

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

Page 72: Tutorial Cocoa Odbc and MySql

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

Page 73: Tutorial Cocoa Odbc and MySql

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

Page 74: Tutorial Cocoa Odbc and MySql

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

Page 75: Tutorial Cocoa Odbc and MySql

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

Page 76: Tutorial Cocoa Odbc and MySql

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

Page 77: Tutorial Cocoa Odbc and MySql

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

Page 78: Tutorial Cocoa Odbc and MySql

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

Page 79: Tutorial Cocoa Odbc and MySql

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

Page 80: Tutorial Cocoa Odbc and MySql

}

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

Page 81: Tutorial Cocoa Odbc and MySql

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

Page 82: Tutorial Cocoa Odbc and MySql

[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

Page 83: Tutorial Cocoa Odbc and MySql

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

Page 84: Tutorial Cocoa Odbc and MySql

[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

Page 85: Tutorial Cocoa Odbc and MySql

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

Page 86: Tutorial Cocoa Odbc and MySql

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

[email protected]

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

Page 87: Tutorial Cocoa Odbc and MySql

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

Page 88: Tutorial Cocoa Odbc and MySql

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

Page 89: Tutorial Cocoa Odbc and MySql

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

Page 90: Tutorial Cocoa Odbc and MySql

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

Page 91: Tutorial Cocoa Odbc and MySql

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

Page 92: Tutorial Cocoa Odbc and MySql

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