17. december 2003 - 13:04Der er
10 kommentarer og 1 løsning
2 dimentionelt array
den ene dimention skal holde en string, den anden en integer
således mitarray() redim preserve mitarray(ettal,ettal) det skal initaliseres udfra et udtræk fra en db, således at string kommer til at holde navnet på det jeg vil chekke og status kommer til at holde et tal der angiver om den givne strings status.
på baggrund af dette array skal de dynamiske kontroller dannes
så hvis status f.eks er 3 og string er "minprocess" laver den fillcolor rød.
Mit problem er rent teknisk hvordan initalisere jeg et sådan array og hvordan læser jeg det.
der er lige mange elementer i dimensionx,y så det burde ikke være et problem
Det ser fint ud, men mit problem nu er at jeg lige meget hvordan jeg definere min type kommer der en fejl. Den skal fungere i en public function i en class. Det er ligesom om at jeg ikke får lov at anvende en type i et class modul. Men det er der det bliver initaliseret.
Hvis jeg så definere typen i et alm .modul ser det ud til at virke men så fejler den når array skal retuneres fra funktionen.
Fejl meddeelse: "Only user-defined types defined in public object modules can be coerced to or from a variant or passwd to late-bound functions"
Min funktion i klassen
Public Function CheckQueue(QueueName() As String)
Dim Conn As ADODB.Connection Dim rs As ADODB.Recordset Dim StoppedQueues() As MyQueue Dim x
Set Conn = New ADODB.Connection Set rs = New ADODB.Recordset strConn = "Driver={SQL Server}; Server=" & databaseServer & "; Option=16834; Database=mosaic;"
Conn.Open strConn, dbUserName, dbPassword Dim testQueue As Byte ReDim StoppedQueues(UBound(QueueName)) For i = 0 To UBound(QueueName) sqlstr = "select name,id,state from Queue" _ & " where name = '" & QueueName(i) & "'"
Debug.Print sqlstr rs.Open sqlstr, Conn Do While Not rs.EOF
testQueue = rs!State If testQueue = 4 Then 'StoppedQueues(x) = rs!Name StoppedQueues(x).MyState = 4
End If StoppedQueues(x).MyQueue = rs!Name x = x + 1
rs.MoveNext DoEvents
Loop rs.Close Next i ReDim Preserve StoppedQueues(x, x) CheckQueue = StoppedQueues()
End Function
Min type defineret i et alm. modul "general declaration"
Public Type MyQueue MyQueue As String MyState As Integer End Type
Martin_Moth, brugerdefinerede typer kan sagens bruges lokalt i en form, et modul, en klasse osv.. Du skal bare definere typen privat. Følgende eksempel virker i en alm. form:
Private Type Noget Hej As String Davs As String End Type
Private Sub Form_Load() Dim Test As Noget Test.Davs = "Mjello" MsgBox Test.Davs End Sub
shjdsi, jeg tror fejlen i din kode er at du ikke har sat funktionen til at returnere en værdi af typen MyQueue. Så prøv at ændre din funktion-header fra
Public Function CheckQueue(QueueName() As String)
til
Public Function CheckQueue(QueueName() As String) as MyQueue
Det har jeg gjort og jeg kom også et lille stykke længere, jeg hsr får ikke ast rode for meget i mit klasse modul oprettet funktioen i et slm modul og kaldt den
Function testCheckQueue(QueueName() As String) As MyQueue
hele funktionen er posted lidt længere oppe samt hvordsan jeg kslder den og forsøger at læse indholdet sf det den returnere.. :-)
Sorry det var det andet spg. jeg har kørende havde faktisk lukket dette :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.