Newsgroup: it.comp.lang.vo-clipper
Titolo: PostgreSQL e Ado

Ciao a tutti,
da un po' di giorni ho iniziato ad usare VO2ADO per sfruttare la
possibilità di avere un eseguibile indipendente dal tipo di database.
A parte i valori nella stringa di connessione, utilizzando lo stesso
codice il risultato è questo:
MS-Sql Server .... funziona tutto;
MySql .... legge la struttura della tabella ma non i records;
PostgreSql ... non si connette.
Qualcuno di voi sta usando VO2ADO ed ha delle dritte da darmi?
Grazie
Biagio

Biagio ha scritto:

Con VO27b utilizzo PostgreSQL con gli ODBC.
In ogni caso ciascun RDBMS  ha un suo "dialetto SQL" che lo
contraddistingue:
p.es
:
pgsql:
...
...
SELF:oTable:Where("date_part('year', datafatt) = 2007")
mssql e Mysql:
...
...
SELF:oTable:Where("YEAR(datafatt) = 2007")
Buon anno.
Carlo

 ha scritto nel messaggio 
news:5fb44192-9c8b-4fe0...@z26g2000pre.googlegroups.com...
Ciao a tutti,






Grazie
Biagio
Io non uso ado ma uso sia mySql che PostgreSql. Se li uso tutti e due con 
gli odbc posso utilizzare la stessa identica sintassi, poichè uso le 
stringhe di sql puro che vanno bene per entrambi. Purtroppo nello specifico 
non posso aiutarti.
Ciao.
    Francesco

Biagio ha scritto:

Uso Vo2Ado da un anno e mi collego senza problemi con Oracle (via 
OLEDB), Access (OLEDB), MySql (Ado via ODBC) e a parte alcune differenze 
nelle sintassi (es. Funzioni campi data) non ho problemi. Ecco un esempio:
Funzione per aprire la connessione:
FUNCTION 
OpenAdoConn(StrConn,pUtente,pPwd,pDB,pTipoConn,pNomeAzi,pProtect) AS 
MyAdoConn
	LOCAL sError AS STRING
	LOCAL lConn AS MyAdoConn // è la Adoconn con in più tipocon
	LOCAL uError:=NIL	AS USUAL
	LOCAL cbErr:=NULL_CODEBLOCK AS CODEBLOCK
	Default(@pNomeAZi,"AZIENDA")
	BEGIN SEQUENCE
		lConn := MyAdoConn{}
		lCOnn:tipocon:=pTipoConn
*		lConn:ConnectionTimeout := 5
		lConn:NomeAzi:=pNomeAzi
		// MS Jet
*		lConn:ConnectionString := "Provider=Microsoft.Jet.OleDb.4.0;Data 
Source=X:\ferrino\tabelle.mdb;;User Id=Admin;Password=;"
		IF pProtect="S" .AND. pTipoConn="ACCESS"
			lConn:ConnectionString := StrConn+"Jet OLEDB:Database Password=ferrino;"
		ELSE
			lConn:ConnectionString := StrConn
		ENDIF
		lConn:CursorLocation := adUseClient
	RECOVER USING uError
	END
	BEGIN SEQUENCE
		IF lconn:TipoCon="ACCESS"
			lConn:Open(NIL,NIL,NIL,NIL)
		ELSEIF lconn:TipoCon="MYSQL"
			lConn:Open(NIL,pUtente,pPwd,NIL)
		ELSEIF lconn:TipoCon="ORACLE"
			lConn:Open(pDB,pUtente,pPwd,NIL)
		ENDIF
	RECOVER USING uError
	END
	IF lConn:State <> adStateOpen
		// Error occurred
		IF lConn:Errors:Count > 0
			// Ado Error
			sError := lConn:Errors:[Item,1]:Description
		ELSEIF IsInstanceOfUsual(uError, #Error)
			sError := uError:Description
		ELSE
			sError := "Unknown error"
		END IF
	ENDIF
	IF !Empty(cberr)
		ErrorBlock(cbErr)
	ENDIF
RETURN lConn
Esempio di chiamata:
METHOD Init( oOwnerApp,Azienda,mTipoCon) CLASS AdoShell
	LOCAL oSB AS StatusBar
*	LOCAL mTipoCon:="" AS STRING
	*LOCAL Azienda AS STRING
	LOCAL DB AS AdoServer
	LOCAL IniPath:="C:\nws2000\bin\" AS STRING
 
	SUPER:Init( oOwnerApp )
 
	SetDeleted(TRUE)
   IF Empty(Azienda)
	*	Azienda	:= (GetString("Conn"			,"Azi"				,"C:\FERRINO\Connessione.INI"))
    IF gtest="S"
		Azienda	:= (GetString("Conn"			,"Azi"			 
,IniPath+"TEST\Connessione.INI"))	
		mTipoCon	:= (GetString("Conn"			,"TIPO"			 
,IniPath+"TEST\Connessione.INI"))	
    ELSE
		Azienda	:= (GetString("Conn"			,"Azi"				,IniPath+"Connessione.INI"))	
		mTipoCon	:= (GetString("Conn"			,"TIPO"				,IniPath+"Connessione.INI"))	
    ENDIF			
   ENDIF
   IF Empty(mTipoCon)
   	mTipoCon:="ACCESS"
   ENDIF	
	#IFDEF __APPWIZ__MODDRAGDROP	
	  SELF:EnableDragDropClient()
	#ENDIF
	oSB := SELF:EnableStatusBar()
	oSB:DisplayTime()
	SELF:Icon 	:= Icon{ResourceID{IDI_STANDARDICON, _GetInst()}}
	SELF:IconSm := Icon{ResourceID{IDI_STANDARDICON, _GetInst()}}
	SELF:aConn:={}
// ACCESS
	*ScriviTXTLog("INIZIO ->Apertura Connessioni","Apertura")
	IF mTipoCon='ACCESS'
    	AAdd(SELF:aConn,OpenAdoConn(Azienda,,,,mTipoCon,"Configurazione"))
	ELSE
 
AAdd(SELF:aConn,OpenAdoConn(Azienda,'root','363631','TERM',mTipoCon,"Configurazione"))
	ENDIF
    DB:=AdoServer{"SELECT * FROM CONNESSIONI WHERE AVVIO='Y' ORDER BY 
SEQUENZA",SELF:aConn[CFG]}
    // MYSQL
* 
AAdd(SELF:aConn,OpenAdoConn(Azienda,'root','363631',,"MYSQL","Configurazione"))
*   DB:=AdoServer{"SELECT * FROM CONNESSIONI WHERE avvio='Y' ORDER BY 
SEQUENZA",SELF:aConn[CFG]}
    DB:GoTop()
    DO WHILE DB:EOF=FALSE
	   AAdd(SELF:aConn,;
			  OpenAdoConn( ;
					DB:FIELDGET(#StrConnection),;	//	StrConn
					db:FIELDGET(#Utente),;	//	pUtente
					db:FIELDGET(#Pwd),;	//	pPwd
					IIF(!Empty(db:FIELDGET(#DB)),db:FIELDGET(#DB),""),;	//	pDB
					db:FIELDGET(#TipoConn),;	//	pTipoConn
					db:FIELDGET(#Descr),;
					db:FIELDGET(#protetto);
					))	//  AS MyAdoConn
		db:Skip()
    ENDDO
	*?NTrim(ALen(SELF:aConn))
*	ScriviTXTLog("FINE ->Apertura Connessioni","Apertura")
	DB:Close()
	oPrinter := PrintingDevice{}
	SELF:gUtente	:= "Guest"
	SELF:oProfilo:=cfgmail{}
	*SetTimer(SELF:handle(),1,1000,NULL_PTR) // Ogni Secondo
	*SetTimer(SELF:handle(),1,60000,NULL_PTR) // Ogni Minuto
 
	SetTimer(SELF:handle(),1,10800000,NULL_PTR)    // Ogni  3 ORE
RETURN SELF
Come avrai notato dal codice non ho le stringhe di connessione costanti:
la prima connessione la prendo da un file INI con il DB di 
configurazione del programma. Successivamente recupero dalla tabella 
connessioni gli altri DB da aprire.
se hai bisogno di altre informazioni sono a tua disposizione.
Buon Lavoro
Carlo Russo

Ciao Carlo,
finalmente sono riuscito a fare la connessione a PostgresSQL tramite
VO2ADO. Interessante il tuo sorgente.
Ora però mi succede una cosa strana: eseguendo una semplice query su
una tabella con 100 record circa, la bBrowse me ne mostra solamente
20. Mi mostra solo i record che possono essere contenuti nella bBrowse
senza la possibilità di scorrimento. Se allungo un po' la finestra ne
vedo 22. Ti è già capitato?
Sto usando VO27b
Grazie in anticipo
Biagio


Non ho mai avuto problemi simili con bbrowse. Quando non vedo il
browser completo (mi è capitato di non vedere delle colonne) ho
risolto con :
self:odcbbrowser:recalculate() o Refresh()
Ciao
Carlo