BzudemO Geschrieben 9. Januar 2008 Geschrieben 9. Januar 2008 Hallo Leute! ich entwickle z.Z. eine ASP.NET Webanwendung mit VB... nun habe ich allerdings ein problem mit dem VB - Code.... vielleicht kann mir jemand von euch helfen? ich wär seeeehr dankbar!!! also .. ich rufe die funktion tourenArray() aus der PageLoad auf und baue dort ein Array auf, welches ich dann zurückgeben und in der PageLoad verwenden möchte... dieses funktioniert aber nicht, weil der compiler mir anmeckert, dass dieses array nich in der PageLoad deklariert ist... weiß einer wie ich das löse? Sub Page_Load() Dim strSQL As String Dim feldName As String Dim merkLetzteTour As String Dim merkVeränd As Integer Dim i As Integer Dim j As Integer Dim k As Integer ' Ermitteln, wieviele Touren verändert worden sind: strSQL = "SELECT COUNT(*)" strSQL = strSQL & " FROM dbo.T_NOTFAX WHERE Changed = 1 GROUP BY Tournummer" merkVeränd = HolMeinWert(strSQL) For i = 0 To merkVeränd ' Touren holen und in ein Array packen: strSQL = "SELECT Tournummer FROM dbo.T_NOTFAX" strSQL = strSQL & " WHERE Changed = 1 GROUP BY Tournummer" tourenArray(strSQL) For k = 0 To j Dim alleTouren As String alleTouren = alleTouren & " " & strArray(k) div1.InnerHtml = alleTouren Next Next End Sub ************************************************************** Function tourenArray(ByVal strSQL As String) Dim j As Integer = 0 Dim strArray(j) Dim strConnect As String strConnect = ConfigurationSettings.AppSettings("connOLEDB") Dim connection As New OleDbConnection(strConnect) Dim command As New OleDbCommand(strSQL, connection) connection.Open() Dim reader As OleDbDataReader = command.ExecuteReader() While reader.Read() ReDim Preserve strArray(j) strArray(j) = reader(0).ToString j = j + 1 reader.Read() End While reader.Close() ReDim Preserve strArray(j) Return strArray(j) End Function Zitieren
msc84 Geschrieben 9. Januar 2008 Geschrieben 9. Januar 2008 hmmm, in PageLoad rufst du die Funtion TourenArray auf, welche dir dein Array füllt, das Array ist allerdings private, das heisst PageLoad kennt das Array strArray gar nicht, strArray = tourenArray(strSql) oder du machst das strArray halt public (hmmnaaajaaaaaa...) Ausserdem vermisse ich irgendwie den Datentyp der Funktion? Und die Funktion gibt nicht das komplette Array zurück sondern nur das element an der Stelle j... Sorry bin C# - ler.... Das ist mir jetzt alles mal so aufgefallen, hoffe konnte dir weiter helfen.... mfg MSC Zitieren
BzudemO Geschrieben 10. Januar 2008 Autor Geschrieben 10. Januar 2008 aaaah... ok, aber deine tips sind sehr hilfreich!... danke erstmal, ich werde es versuchen hinzubekommen!! :) Zitieren
Argbeil Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 Die tourenArray-Function ist erstmal nicht so gut. Du erstellst erst ein Array mit 0 elementen und vergrössertst das dann, dazu muss aber jedes mal das komplette Array kopiert werden, das ist total langsam. Nimm lieber eine ArrayList oder ein Dictionary und konvertiere die zum Schluss zu einem Array. In der PageLoad solltest du nicht bei jedem Load auf die Datenbank zugreifen. Dann nimmst du den Rückgabewert deiner Function nicht entgegen, kannst also nicht feststellen was das Ergebnis war. Auf das strArray kannst du in der Methode nicht zugreifen weil es in der Methode nicht definiert ist. Und: kleine Design-Tipps: * In der Codebehind-Datei sollte kein SQL Code stehen, besser ein einer eigenen Datenzugriffsschicht erledigen. * Über die Veränderungen kannst du dich auch mit mit einem NotifyCache informieren lassen wenn du Oracle oder SQL Server 2005 verwendest * Den SQL Code sollte man nicht mit String Operationen zusammensetzen, das ist anfällig für SQL Injection. Besser Parameter verwenden. Zitieren
Argbeil Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 hmmm, in PageLoad rufst du die Funtion TourenArray auf, welche dir dein Array füllt, das Array ist allerdings private, das heisst PageLoad kennt das Array strArray gar nicht, strArray = tourenArray(strSql) oder du machst das strArray halt public (hmmnaaajaaaaaa...) Ausserdem vermisse ich irgendwie den Datentyp der Funktion? Und die Funktion gibt nicht das komplette Array zurück sondern nur das element an der Stelle j... Sorry bin C# - ler.... Das ist mir jetzt alles mal so aufgefallen, hoffe konnte dir weiter helfen.... mfg MSC Nicht ganz, wenn das Array Private oder Protected wäre würde es funktionieren. Es ist aber lokal in der Methode definiert. Der Rückgabetyp fehlt allerdings, das stimmt. Zitieren
BzudemO Geschrieben 10. Januar 2008 Autor Geschrieben 10. Januar 2008 ok, erstmal danke für eure antworten! ja, auf diesem gebiet bin ich auch nich fit.. versuche es mir selber beizubringen.... ich habe jetzt das strArray außerhalb aller functions und sub als public deklariert , was ich aber nicht verstehe, ist: wie übergebe und vor allem EMPFANGE ich das array (bzw. die arrayList, wenn ichs dann doch noch umbaue) richtig?? weil das nämlich zur zeit noch der hauptfehler ist bei mir... kann mir da einer kurz sagen wie ich das richtig mache? wäre super Zitieren
msc84 Geschrieben 10. Januar 2008 Geschrieben 10. Januar 2008 naja wenn du das array doch nun public hast brauchst du doch nix mehr zu übergeben. Dann ist es ja überall bekannt... Ob das n guter Stil ist ist die andere Frage... Mal n schnelles Beispiel wie du ein Array an eine Funktion übergeben kannst. Private Function FillArray(strArray() As String) Dim i As Integer While i < 10 strArray(i) = "TEST" i = i + 1 Wend End Function Private Sub Form_Load() Dim strArray(10) As String Dim i As Integer Call FillArray(strArray) While i < 10 MsgBox strArray(i) i = i + 1 Wend End Sub Zitieren
BzudemO Geschrieben 11. Januar 2008 Autor Geschrieben 11. Januar 2008 ok, vielen vielen dank! jetz klappt das!... :) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.