20 novembre, 2007

Errore 3704 VB

Nello specifico questo errore mi è capitato su una macro VBA su Excel, quando tentavo di fare l'operazione:

Cells (6, a). CopyFromRecordset adoRS

Nel caso specifico adoRS è un recordset con dei dati presi da un DB Oracle, per la precisione versione 9.2.0.1.
Il fatto strano era che su un pc mi funzionava mentre su un altro no, utilizzando lo stesso codice. A questo punto un dubbio deve sorgerti spontaneo, e cioè se è tutto configurato a dovere o almeno se è tutto configurato "uguale",almeno per la parte che ti interessa; nel caso specifico infatti avevo 2 versioni diverse degli ODBC Driver, ho dovuto utilizzare quindi gli stessi identici files. La stessa cosa si può presentare con Java, in questo caso avremo invece una roba del tipo:

java.sql.SQLException: [Microsoft][Driver Manager ODBC] Funzione SQLAllocHandle
del driver su SQL_HANDLE_ENV non riuscita.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)


Sapete java deve fare più il fico.. Comunque per ovviare al problema è semplice, installate in tutti i pc gli stessi ODBC/JDBC driver.
Ecco qui i link alle risorse Oracle:

JDBC

ODBC

Le risorse sono gratuite, è però necessario creare un account sul sito Oracle per poterle scaricare.

01 ottobre, 2007

Creare files Zip con java

Allora java di per sè è un brutta bestia, ma come vedremo non lo sarà mai abbastanza. Quando infatti tentiamo di creare un file zip, ci troveremo di fronte a diversi problemi. Possiamo ovviare a questi problemi utilizzando lo script che si trova a questo indirizzo:
http://www.exampledepot.com/egs/java.util.zip/CreateZip.html
Oppure ancora meglio possiamo utilizzare come partenza quello script, e come arrivo il mio:

import java.util.zip.*;
import java.io.*;

public class CreateZip {

public CreateZip(String cartella,String[] arrayDiNomiFiles) {

// These are the files to include in the ZIP file
String[] filenames = new String[arrayDiNomiFiles.length];

//qui io inizializzo l'array con i files da inserire nell'archivio, a me
//serviva perchè avevo già un array con dei nomi ma i nomi files
//erano diversi anche se standardizzati
for (int i=0;i 0) {
out.write(buf, 0, len);}

// Complete the entry
out.closeEntry();
in.close();}

// Complete the ZIP file
out.close();} catch (IOException e) {
//la si può gestire anche in altri modi,ma è importante che non si lasci vuoto
System.out.println(e);}}}

Il sito exampledepot è utile ma diciamo che alcuni piccoli pezzi celi siamo dovuti trovare da soli. L'importane è comunque essere riusciti nel nostro intento.

04 settembre, 2007

Gestione della clipboard con Excel VBA

Al contrario del post precedente, possiamo notare come viene gestita la clipboard dal VBA di excel:
Set mydata = New DataObject
mydata.SetText STRINGA
mydata.PutInClipboard
Naturalmente, è necessario che siano abilitati i riferimenti, andando su strumenti -> riferimenti e flaggando dove necessario, nel caso io ho flaggato:
Visual Basic For Application
Microsoft Excel 11.0 Object Library
OLE Automation
Microsoft Office 11.0 Object Library
Microsoft Forms 2.0 Object Library
Microsoft ActiveX Data Objects 2.7 Object Library

Gestione della clipboard con Access VBA

Mi sono trovato ultimamente ad utilizzare access per un piccolo progetto e, nel momento del debug,mi sono reso conto che il vba access non ha una gestione della clipboard. A cosa potrà servire la clipboard se hai a disposizione un database, direte voi. Certo la domanda è legittima, ed in effetti si può anche evitare di usarle,inserendo i valori necessari all'interno di una cella, ma per questioni di praticità,efficienza e velocità, mi sono reso conto che la maniera più comoda di gestire il debug del sql di access è proprio la copia della stringa contenente il sql nella clipboard. Cmq poco importa a cosa possa servire questa funzionalità, l'importante è sapere che si può fare e come sono le modalità per farlo.
Per prima cosa dobbiamo creare un nuovo modulo, anche dalla finestra oggetti, e successivamente inserire questo codice che io sinceramente non ho nemmeno letto:
Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) _
As Long
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _
As Long
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Declare Function CloseClipboard Lib "User32" () As Long
Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) _
As Long
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
ByVal lpString2 As Any) As Long
Declare Function SetClipboardData Lib "User32" (ByVal wFormat _
As Long, ByVal hMem As Long) As Long

Public Const GHND = &H42
Public Const CF_TEXT = 1
Public Const MAXSIZE = 4096

Function ClipBoard_SetData(MyString As String)
Dim hGlobalMemory As Long, lpGlobalMemory As Long
Dim hClipMemory As Long, X As Long

' Allocate moveable global memory.
'-------------------------------------------
hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1)

' Lock the block to get a far pointer
' to this memory.
lpGlobalMemory = GlobalLock(hGlobalMemory)

' Copy the string to this global memory.
lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)

' Unlock the memory.
If GlobalUnlock(hGlobalMemory) <> 0 Then
MsgBox "Could not unlock memory location. Copy aborted."
GoTo OutOfHere2
End If

' Open the Clipboard to copy data to.
If OpenClipboard(0&) = 0 Then
MsgBox "Could not open the Clipboard. Copy aborted."
Exit Function
End If

' Clear the Clipboard.
X = EmptyClipboard()

' Copy the data to the Clipboard.
hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)

OutOfHere2:

If CloseClipboard() = 0 Then
MsgBox "Could not close Clipboard."
End If

End Function
Il tutto al di sotto della scritta Option Compare Database.
Fatto questo nel codice della nostra form dovremmo scrivere:
ClipBoard_SetData STRINGA

dove STRINGA è il nome della variabile di tipo String che contiene il nostro sql.
Fatto questo basterà creare una query farlocca nel quale inserire di volta in volta il sql presente nella clipboard cliccando il nostro ben conosciuto ctrl+v.

Ciao sono Diego mi presento

Ciao sono Diego mi presento piacere Diego. Sono un programmatore, il linguaggio che uso in maniera specifica è il PLSQL, ma spesso mi ritrovo ad usare altri linguaggi e programmi come VBA o Java, e dato che mi trovo a volte in situazioni difficili, dal punto di vista della programmazione, e che riesco con gran fatica, solamente attraverso ricerche magari di giorni sul web o su libri di programmazione, a risolvere, apro questo blog per condividere alcune soluzioni che ho trovato e che per alcuni potranno sembrare banali ma che per altri possono richiedere parecchio tempo per essere risolti. Magari invece uno viene qui trova la soluzione ai soui problemi,anzichè dover girare per forum o gruppi per ore arrabattandosi con pezzi di codice qui e pezzi di codice li. Oltre a problemi di programmazione indicherò alcuni programmi utili magari sotto windows o sotto linux così che se qualcuno ha problemi può usare quelli per risolverli.
Ciao ci sentiamo presto.