Anatomia Form ODBC

6.1.1/2
Descrizione dell'anatomia di un sorgente per l'integrazione con una tabella SQL

Strutture descrittive

Di default usiamo un oggetto OW_SCR di nome "SCR" a cui assegnamo OdbcScroll.
Di seguito definiziamo la struttura EH_TABLEHOOK arsHook con il matching dei campi.
	struct OBJ obj[]={
	{OW_SCR ,"SCR"    ,OFF,ON , 70, 32,360,241,"","",OdbcScroll},
	{O_ICONEB,"CANC"   ,OFF,ON , 21, 34, 30, 30,"CESTINO"},
	{O_ICONEB,"DELIPT" ,OFF,ON , 21, 75, 30, 30,"DELIPT"},
	{O_KEYDIM,"CR"     ,OFF,ON , 10,434, 66, 24,"#Salva"},
	{O_ICONEA,"ESC"    ,OFF,ON ,389,433, 40, 26,"ESCI"},
	{O_MARK  ,"FLOCK"  ,OFF,ON , 69,396,  0, -1,"Blocco figura"},
	{STOP}
	};

	struct IPT ipt[]={
	{ 1, 1,ALFA,RIGA, 13,292, 47,  8,  0, 15,  1,  1},
	{ 1, 1,ALFA,RIGA, 72,292,355, 30,  0, 15,  1,  0},
	{ 1, 1,ALFA,RIGA, 72,331,355,200,  0, 15,  1,  0},
	{ 1, 1,ALFA,RIGA, 72,370,355,200,  0, 15,  1,  0},
	{ 0, 0,STOP}
	};

	EH_TABLEHOOK arsHook[]={
	{_ALFA,"CODICE","",0},
	{_ALFA,"DESCRIZIONE","",1},
	{_ALFA,"EMAIL","",2},
	{_ALFA,"CELLSMS","",3},
	{_BOOL,"FLOCK","FLOCK",0},
	{0,NULL}};

Inizializzazione scroll

Un sempio di inizializzazione, anche se si consiglia una funzione local _setQuery con WHERE differenti per rintracciare gli items.
	obj_message("SCR",WS_CODENAME,0,"CODICE"); // Indico quale è il codice di query
	obj_message("SCR",WS_EXTFUNZ,0,scrFigure); // Setto la funzione di notifiche esterne
	obj_message("SCR",WS_SETHRDW,TRUE,NULL); // Indico che è possibile una varizione orizzontale.
	obj_message("SCR",WS_SETFILTER,0,"SELECT * FROM {LIB}.PGQG01 ORDER BY DESCRIZIONE"); // Indico la query associata allo scroll
	_formReset();

Selezione

Esempio di selezione con doppio click su item in scroll.
  if (obj_press("SCR")) {
	strcpy(_sEditing.szCode,OBJ_keyname);
	odbc_hookget(arsHook,"SELECT * FROM {LIB}.PGQG01 WHERE CODICE='%s'",_sEditing.szCode);
	obj_message("SCR",WS_SET_ROWSELECTED,0,_sEditing.szCode);
  }

Memorizzazione dati

Esempio di memorizzazione (submit).
	if (key_press(CR)||obj_press("CROFF"))
	{
		BOOL bError=FALSE;
		if (!*ipt_read(0)) {win_info("E' necessario inserire un codice");ipt_setnum(0);continue;}
		if (!*ipt_read(1)) {win_info("E' necessario inserire una descrizione");ipt_setnum(1);continue;}

		if (!*_sEditing.szCode) {
			bError=odbc_hookinsert(arsHook,"INSERT INTO {LIB}.PGQP01 ([FIELDS]) VALUES ([VALUES])");
		}
		else {
			bError=odbc_hookupdate(arsHook,"UPDATE {LIB}.PGQG01 SET [FIELDS] WHERE CODICE='%s'",_sEditing.szCode);
		}
		if (bError) {win_info("Dati già esistenti"); continue;}
		_formReset();
	}

Richiamo via codice input

	switch (ipt_sel()) {
		case 0: // Codice
			if (strlen(ipt_read(0))<1) {ipt_setnum(0); break;}
			if (!strcmp(ipt_read(0),_sEditing.szCode)) break;
			if (odbc_hookget(arsHook,"SELECT * FROM {LIB}.PGQG01 WHERE CODICE='%s'",ipt_read(0))) {
				_formReset();
			}
			strcpy(_sEditing.szCode,ipt_read(0));
			break;
	}
Easyhand C/C++: Anatomia Form ODBC | Last modified: 18/03/2011 17.47.55 Europe/Rome | #1.1339
P.. 1012
Easyhand C/C++
Una mano alle tue idee.
Privacy Policy