Zdravím pánové Předem informuji, že celý projekt je psán v VB.net2010, proto píši zde. Chtěl bych se zeptat, zda by někdo poradil jak zjistit z dotazu, názvy a datové typy parametrů ? Potřeboval bych znát parametry ještě před průchodem recordsetu, protože jinak logicky dojde k chybě ? Celý by to mělo pracovat tak, že si aplikace načte seznam dotazů uložených v access, vytvoří z toho položky v menu, vytvoří se událost na zpracování dotazu a výsledek je následně uložen do clipboardu. Pokud však dotaz obsahuje parametry, tak vyžadované informace bude muset zadat uživatel přímo v aplikaci, ještě dříve než bude dotaz poslám pro zpracování v recordsetu. Dotaz s parametrem si vytvořit umím, ostatně je toho plný net, ale obrácený postup, kde z již existujicího dotazu potřebuji nejdříve zjistit parametry, tak o tom jsem nic nenašel. Řešit bych to sice mohl vytvářením dotazů přímo v aplikaci, ale to bych poté musel aktualizovat a kompilovat aplikaci po každém požadavku na aktualizaci či přidání dotazu. Posílám kód, který funguje přesně jak má ale jen u bezparametrických dotazů. Posílám jen část, která se týká zpracování samotného dotazu. Kdyby by někdo poradil, byl bych moc vděčný.
Imports Microsoft.Office.Interop
Public Class c_ImportQuery
Public Sub QueryToClipboard(ByVal QueryName As String)
Dim CS As String = Global.MS.My.MySettings.Default.MSConnectionString
Dim adoCon As New ADODB.Connection With {.ConnectionString = CS}
Dim adoRec As New ADODB.Recordset
Dim TheString As New System.Text.StringBuilder
Clipboard.Clear()
TheString.Append("")
Try
Application.DoEvents()
f_MDI.Cursor = Cursors.WaitCursor
adoCon.Open()
adoRec.Open(QueryName, adoCon, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)
With adoRec
For Each adoField As ADODB.Field In .Fields
TheString.Append(adoField.Name & " " & adoField.Type & vbTab)
Next
TheString.Remove(TheString.Length - 1, 1)
TheString.Append(vbCr)
Do Until .EOF
For Each adoField As ADODB.Field In .Fields
TheString.Append(adoField.Value & vbTab)
Next
.MoveNext()
TheString.Remove(TheString.Length - 1, 1)
TheString.Append(vbCr)
Loop
End With
Clipboard.SetDataObject(TheString.ToString)
cMessage.StatusText("Projekce byla úspěšně vytvořena", False)
Catch ex As Exception
cMessage.ErrorMsg(Err.Description, "Chyba Projekce")
Finally
Try
adoRec.Close()
adoCon.Close()
adoRec = Nothing
adoCon = Nothing
Catch ex As Exception
Finally
f_MDI.Cursor = Cursors.Default
End Try
End Try
End Sub
End Class
|