Avatar billede shjdsi Nybegynder
11. december 2003 - 12:02 Der er 12 kommentarer og
1 løsning

oprettelse og arbejde med array

hej! jeg vil gerne oprette et string array på basis af en list control

Derefter vil jeg udskrive den til debug.print eller bare msgbox. (Er ved at teste det) følgende er rimeligt logisk for mig

Dim i, x, queueCnt As Integer
queueCnt = lstQueueSelected.ListCount
Dim Queue(queueCnt) As String
x = 0
For i = 1 To (lstQueueSelected.ListCount - 1)
  Queue(x) = lstQueueSelected.List(i)
    x = z + 1
   
 
  Next i
For i = LBound(Queue) To UBound(queueCnt)
MsgBox Queue(i)
Next

DENNE SÆTNING FOR JEG IKKE LOV TIL.
Dim Queue(queueCnt) As String

det betyder at hvis jeg asnvender lbound ubound vil den loope igennem alle de predefinerede elementer jeg har allokeret til mit array.

jeg ved man  ikke  dynamisk kan allokere et array i vb, men er der ikke en smartere måde med lige netop denne problem stilling.
Avatar billede joern Nybegynder
11. december 2003 - 12:20 #1
Hej.

Der kan godt i VB5 og fremefter anvendes dynamisk array.  Kig under 'Redim Preserve' i hjælpen.

Jeg anbefaler at du dimensionerer dine variable i et modul fremfor i formen, men det er tildels en smagssag.  Anvender du mere en én form i dit projekt og ønsker værdier overført mellem forme, er det det bedste med 'Global' i et modul.
At dimensionere i en subrutine skal der være en MEGET god grund til, gør det under Generel, hvis du gør det i formen.


Dim i, x, queueCnt As Integer, queue() as string

queueCnt = lstQueueSelected.ListCount
ReDim Preserve Queue(queueCnt + 2)

x = 0
For i = 0 To (lstQueueSelected.ListCount - 1)
  Queue(i) = lstQueueSelected.List(i)
  x = x + 1        'i din kode står der z  ??
Next i

For i = 0 To x
  MsgBox Queue(i)
Next i

Sådan noget lignende, hvorfor både i, x og z ?

M.v.h.  Jørn
Avatar billede martin_moth Mester
11. december 2003 - 12:24 #2
Så ved du helt forkert - du kan sagtens lave dynamiske arrays i VB. Jeg skriver lige din kode lidt om:

Dim i as integer
Dim Queue() As String
dim queueCnt as Integer

queueCnt = lstQueueSelected.ListCount

For i = 0 To (queueCnt - 1)
  redim preserve Queue(i)          '< Her ligger guldet :o)
  Queue(i) = lstQueueSelected.List(i)
Next i

For i = LBound(Queue) To UBound(queueCnt)
  MsgBox Queue(i)
Next


I din kode står der nogle x'er og nogle z'er, som jeg ikke kan se at du har brug for....
Avatar billede shjdsi Nybegynder
11. december 2003 - 12:26 #3
Det var vist en taste fejl med det "z" mener du at variable generalt skal defineres i et modul som global... Gælder det alle variabler og array's i mit program.
Avatar billede martin_moth Mester
11. december 2003 - 12:28 #4
Lidt mere enkelt:

Dim i as integer
Dim Queue() As String
redim Queue(lstQueueSelected.ListCount)
For i = 0 To UBound(queueCnt)
  Queue(i) = lstQueueSelected.List(i)
  MsgBox Queue(i)
Next i
Avatar billede shjdsi Nybegynder
11. december 2003 - 12:28 #5
Og ja! jeg kan se at man godt kan dynamisk allokere ved redim preserve.
jeg tager det i mig igen. :-)
Avatar billede martin_moth Mester
11. december 2003 - 12:32 #6
Om du vil dim'mme i moduler eller ej er en smagssag. joern kan lide det, jeg gør det aldrig. Du kan sagtens "få fat" i variabler imellem forms, selvom de er dim'met i de enkelte forms og ikke i et modul. Men selvdefinerede typer skal defineres i et modul

Jeg selv bruger kun moduler til at definere procedurer og functioner, der genbruges i forskellige programmer. Men det er en smagssag. Der vil være lidt at snakke om mht. performance, hvorvidt en variabel bør erklæres som global hvis den kun bruges som lokal variabel. Men næppe noget måleligt i dit project :o)
Avatar billede martin_moth Mester
11. december 2003 - 12:34 #7
Øv - tastefejl. I min "lidt mere enkelt" mente jeg:

Dim i as integer
Dim Queue() As String
redim Queue(lstQueueSelected.ListCount)
For i = 0 To UBound(Queue)
  Queue(i) = lstQueueSelected.List(i)
  MsgBox Queue(i)
Next i
Avatar billede shjdsi Nybegynder
11. december 2003 - 12:41 #8
Ok nu vi er her med array's jeg har et class modul hvor jeg gerne vil have overført mit Queue array til en funktion i denne class.
kan det lade sig gøre med property let, property get. koden i classen ser således ud.


Private Sub Class_Terminate()
'rs.Close
End Sub


Public Property Get QueueName() As Variant
    ' CheckQueue (QueueName)
End Property

Public Property Let QueueName(ByVal vNewV)
Dim Que
Que = vNewValue

CheckQueue (Que)
End Property
    Private Function CheckQueue(QueueName)
    Dim Conn As ADODB.Connection
    Dim rs As ADODB.Recordset
   
    Set Conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    strConn = "Driver={SQL Server}; Server=SOVS; Option=16834; Database=mindb;"
   
    Conn.Open strConn, "minuser", "mitpasswd"
    Dim testQueue As Byte
   
    sqlstr = "select name,id,state from Queue" _
    & " where name = '" & QueueName & "'"
   
          Debug.Print sqlstr
    rs.Open sqlstr, Conn
    Do While Not rs.EOF
       
          testQueue = rs!State
          If testQueue = 4 Then
          MsgBox "queue are stopped:" & rs!Name
          End If
            rs.MoveNext
            DoEvents
       
        Loop
    End Function
jeg kunne sagtens lave det i et modul det ville være nemmere, men jeg vil lave en dll, eller activeX som jeg kan genbruge i aqndre projekter. Så jeg leger lidt med de class ting. (har rodet lidt med det i c++ for år siden) Så jeg kender lidt til hvad det handler om.
Avatar billede martin_moth Mester
11. december 2003 - 13:25 #9
Spørger dui stadig om noget - i så fald hvad?
Avatar billede shjdsi Nybegynder
11. december 2003 - 13:42 #10
jeg ville bare høre hvordan man overførte et array til en property i en class. Men ved nærmere eftertanke så høre det et andet spørgsmål ved. Så her er points og tak for hjælpen... :-)
Avatar billede martin_moth Mester
11. december 2003 - 14:05 #11
joern - vil du have 15?
Avatar billede martin_moth Mester
11. december 2003 - 14:06 #12
shjdsi: Det er vel bare at definere i Get og Let, at den skal modtage et array som parameter?
Avatar billede joern Nybegynder
11. december 2003 - 17:27 #13
Hej Martin>>

Sødt af dig at ville dele, men det skal vi ikke ind på.  Spørgeren bestemmer hvad der hjælper ham bedst. 
M.v.h. Jørn
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester