German Tabelle als Datenpool

Discussion in 'German Forum' started by Bobbes, May 28, 2008.

  1. Bobbes

    Bobbes Active Member Licensed User

    Hi,
    Ich hab mal wieder ne Frage : Ich benutze (weil ich es nicht anders weis) eine Tabelle als Datenpool. Heißt also ich gebe Daten über eine Combobox ein, vergleiche die Daten über zig If Then Schleifen mit der Tabelle um aus ihr meinen Wert zu bekommen, der dann angezeigt werden soll. Aber irgendwie bietet er mir Mondwerte (falsche Werte) an.

    Geht das auch einfacher ??

    MfG
    Bobbes
     
  2. klaus

    klaus Expert Licensed User

    Hi Bobbes,

    Ich bin nicht sicher ob Ichs richtig verstanden habe.
    Hat deine Tabelle mehrere Einträge pro Linie ?

    Könntest Du den Code uploaden ?
    Damit wäre es Einfacher zu verstehen.

    Hab gesehen dass Du in Sclitz ansässig bist. Bin vor eingen Jahrzehnten in Lauterbach zur Schule gegangen.

    Grüsse.
     
    Last edited: May 28, 2008
  3. Bobbes

    Bobbes Active Member Licensed User

    Jetzt ehrlich, ich geh kaputt, wie klein ist eigentlich die Welt (frei nach der Wegbeschreibung Schlitz, Queck, Paris)
    hieß die Schule BZL ?
    Da war ich eigentlich von meiner Lehre an. Überbetriebliche Ausbildung und danach Meisterschule in 1993.

    Nun zu meiner Problematik: Ich hab mal alles zusammen gepackt.

    Gruß Bernd Heil
    Schlitz
    bei Lauterbach
    in Hessen

    P.S.: Es handelt sich um die Querschnittsberechnung
     
  4. klaus

    klaus Expert Licensed User

    Hallo Bernd,
    Könntest Du ein Beispiel mit Werten geben wo es happert ?

    Ich sehe vorläufig nicht was falsch geht.

    Das war damals in der Mittelschule, in der ganz alten Schule, am Alten Esel hiess des glaube Ich.

    Grüsse
     
  5. Bobbes

    Bobbes Active Member Licensed User

    Den Alten Esel gibt es noch, aber da ist ja lange keine Schule mehr drinn.
    Da sind jetzt immer die Musterungen für die Bundeswehr.

    Zu Problem: Soweit funtz das Ganze ja, aber wenn z.B. der Strom größer ist als der in der Tabelle dann kann er das nicht richtig auswerten.

    Ich dachte es gäbe vielleicht eine bessere Möglichkeit auf Daten zuzugeifen.
    Ich finde die ganzen If Then Schleifen irgendwie unprofessionell.

    MfG
    Bernd
     
  6. klaus

    klaus Expert Licensed User

    Ich befürchte dass Du leider um die Ganzen If Then Tests nicht drum rum kommst. Kenne auch keine elegantere Möglichkeit.

    Ich wusste dass da schon lange keine Schule mehr drin ist.
    Aber war doch ein schöner Name für eine Schule 'Alter Esel' , gelle ?

    Grüsse.
     
  7. Bobbes

    Bobbes Active Member Licensed User

    schade, naja dann mache ich mal so weiter

    Kommst Du aus Lauterbach ?

    MfG Bernd
     
  8. Filippo

    Filippo Expert Licensed User

    Hallo Bernd,

    ich habe mir deinen Code angeschaut und wenn ich es richtig interpretiert habe, sind in dem Sub btnohmBerechnen_Click 2 End If zuviel. Bitte kontrolliere es nochmal.

    Ciao,
    Filippo
     
  9. Bobbes

    Bobbes Active Member Licensed User

    Hmm, konnte ich jetzt nicht feststellen.
    Wenn ein End if fehlt oder zu viel ist wird das doch von B4P peinlich genau überwacht, oder ?

    Grüße
     
  10. Filippo

    Filippo Expert Licensed User

    Normal ja, es kommt ganz darauf an wie es aufgebaut ist. Ich habe auf jeden Fall die letzte zwei End IF auskommentieren können und es funktioniert immer noch.
     
  11. Bobbes

    Bobbes Active Member Licensed User

    Genau die beiden letzten, an die habe ich auch gedacht und habe sie weggemacht( 'end if ) . Da wurde aber sofort gemekert.

    Gruß
    Bernd
     
  12. specci48

    specci48 Well-Known Member Licensed User

    Hallo Bobbes,

    ich mach hier mal einen auf Quereinsteiger...
    Also ein fehlendes "End If" habe ich auch nicht bemerkt, dafür aber einige andere Dinge. Z.B. lassen sich die Numx_SelectionChanged mit einem Select...Case besser lesen:
    Code:
    Sub Num1_ValueChanged
       txtring1.Visible = 
    true
       txtring1.BringToFront
       num1.Minimum = 
    1
       
    If num1.Value <> 0 Then 
          txtwert1.text = num1.Value
       
    End If
       
    Select num1.Value
          
    Case 1
             txtring1.Color=cBrown 
          
    Case 2
             txtring1.Color=cRed 
          
    Case 3
             txtring1.Color=cOrange 
          
    Case 4
             txtring1.Color=cYellow 
          
    Case 5
             txtring1.Color=cGreen
          
    Case 6
             txtring1.Color=cblue
          
    Case 7
             txtring1.Color=cPurple
          
    Case 8
             txtring1.Color=cGray
          
    Case 9
             txtring1.Color=cWhite
       
    End Select
    End Sub

    Sub Num2_ValueChanged
       txtring2.Visible = 
    true
       txtring2.BringToFront
       num2.Minimum = 
    0
       txtwert2.text = num2.Value
       
    Select num2.Value
          
    Case 0
             txtring2.Color=cBlack
          
    Case 1
             txtring2.Color=cBrown 
          
    Case 2
             txtring2.Color=cRed 
          
    Case 3
             txtring2.Color=cOrange 
          
    Case 4
             txtring2.Color=cYellow 
          
    Case 5
             txtring2.Color=cGreen
          
    Case 6
             txtring2.Color=cblue
          
    Case 7
             txtring2.Color=cPurple
          
    Case 8
             txtring2.Color=cGray
          
    Case 9
             txtring2.Color=cWhite
       
    End Select
    End Sub

    Sub Num3_ValueChanged
       txtring3.Visible = 
    true
       txtring3.BringToFront
       txtwert3.text = 
    ""
       
    Select num3.Value
          
    Case 0
             txtring3.Color=cBlack
          
    Case 1
             txtring3.Color=cBrown 
             txtwert3.text = 
    "0"
          
    Case 2
             txtring3.Color=cRed
             txtwert3.text = 
    "00"
          
    Case 3
             txtring3.Color=cOrange 
             txtwert3.text = 
    "000"
          
    Case 4
             txtring3.Color=cYellow 
             txtwert3.text = 
    "0000"
          
    Case 5
             txtring3.Color=cGreen
             txtwert3.text = 
    "00000"
          
    Case 6
             txtring3.Color=cBlue
             txtwert3.text = 
    "000000"
             txtzehntel.Visible = 
    false
             txtzehntel.Visible = 
    false
          
    Case 7
             txtring3.Color=cGold
             txthundertstel.Visible = 
    false
             txtzehntel.Visible = 
    true
          
    Case 8
             txtring3.Color=cSilver
             txthundertstel.Visible = 
    true
             txtzehntel.Visible = 
    false
       
    End Select
    End Sub

    Sub Num4_ValueChanged
       txtring4.Visible = 
    true
       txtring4.BringToFront
       
    Select num4.Value
          
    Case 1
             txtring4.Color=cBrown
             txtwert4.text=
    "+/- 1%"
          
    Case 2
             txtring4.Color=cRed
             txtwert4.text=
    "+/- 2%"
          
    Case 3
             txtring4.Color=cGold
             txtwert4.text=
    "+/- 5%"
          
    Case 4
             txtring4.Color=cSilver
             txtwert4.text=
    "+/- 10%"
       
    End Select
    End Sub
    Weiterhin stellt sich die Frage, ob Du mit einem externen Editor arbeitest, weil in vielen If End If Konstrukten eine Einrückung fehlt. Eine solche Einrückung macht den Code deutlich lesbarer, auch für den Entwickler selbst. Da sieht man dann auch eher ein fehlendes "End If"... ;)

    In den GROßEN If-Schleifen für 230 und 400 Volt gibt es zwei überflüssige Abfragen, weil innerhalb dieser Schleifen bei der Verlegeart noch einmal auf Spannung = 230 bzw. 400 geprüft wird.

    Als nächstes kann man sicherlich die folgenden Zeilenpaare
    Code:
    If Spalte = 1 AND txtQuerStrom.Text <= tableVerlegeart.Cell("A1/2",Reihe) Then 
       QuerTabelle = tableVerlegeart.Cell (
    "mm²",reihe+1)
       MaxStrom = tableVerlegeart.Cell(
    "A1/2",Reihe)
       QuergrosserQuertabelle = 
    "Querschnittvorschlag : "&Round(Quertabelle,2)&" mm²"
    End If
    If Spalte = 1 AND txtQuerStrom.Text >= tableVerlegeart.Cell("A1/2",Reihe) Then 
       QuerTabelle = tableVerlegeart.Cell (
    "mm²",reihe+1)
       MaxStrom = tableVerlegeart.Cell(
    "A1/2",Reihe)
       QuergrosserQuertabelle = 
    "Querschnittvorschlag : "&Round(Querschnitt,2)&" mm²"
    End If
    besser durch so etwas ersetzen
    Code:
    If Spalte = 1 Then
       QuerTabelle = tableVerlegeart.Cell (
    "mm²",reihe+1)
       MaxStrom = tableVerlegeart.Cell(
    "A1/2",Reihe)
       
    If txtQuerStrom.Text >= tableVerlegeart.Cell("A1/2",Reihe) Then
          QuergrosserQuertabelle = 
    "Querschnittvorschlag : "&Round(Querschnitt,2)&" mm²"
       
    Else
          QuergrosserQuertabelle = 
    "Querschnittvorschlag : "&Round(Quertabelle,2)&" mm²"
       
    End If
    End If
    Der Code wird somit etwas kompakter und die AND-Verknüpfungen entfallen.

    Dann gibt es noch weitere Stellen, an denen eine zweite If Abfrage durch ein einfache Else ersetzt werden kann. Z.B. statt
    Code:
    If Leistfaktor = 1 Then ScheinleistText = ""
    If leistfaktor <> 1 Then 
       OhmScheinLeistText = 
    " VA"
       OhmBlindLeistText = 
    " var"
       Scheinleist = 
    Round(spannung2*txtohmstrom.Text*wurzel3,2)
       BlindLeist = 
    Round(Sqrt((spannung2*spannung2*txtohmstrom.Text*txtohmstrom.Text*wurzel3*wurzel3)-(txtohmStrom.Text*txtohmStrom.Text*spannung2*spannung2*Leistfaktor*Leistfaktor*Wurzel3*Wurzel3)),2)
       
    If Scheinleist > 1000 Then 
          Scheinleist = 
    Round(Scheinleist / 1000,2)
          OhmScheinLeistText = 
    " kVA"
          Blindleist = 
    Round(Blindleist / 1000,2)
          OhmBlindLeistText = 
    " kvar"
          ScheinleistText= 
    "Scheinleistung : "&Scheinleist&" "&OhmScheinLeistText&crlf&"Blindleistung : "&BlindLeist&" "&OhmBlindLeistText
       
    End If
    End If
    folgendes Konstrukt verwenden
    Code:
    If Leistfaktor = 1 Then 
       ScheinleistText = 
    ""
    Else
       OhmScheinLeistText = 
    " VA"
       OhmBlindLeistText = 
    " var"
       Scheinleist = 
    Round(spannung2*txtohmstrom.Text*wurzel3,2)
       BlindLeist = 
    Round(Sqrt((spannung2*spannung2*txtohmstrom.Text*txtohmstrom.Text*wurzel3*wurzel3)-(txtohmStrom.Text*txtohmStrom.Text*spannung2*spannung2*Leistfaktor*Leistfaktor*Wurzel3*Wurzel3)),2)
       
    If Scheinleist > 1000 Then 
          Scheinleist = 
    Round(Scheinleist / 1000,2)
          OhmScheinLeistText = 
    " kVA"
          Blindleist = 
    Round(Blindleist / 1000,2)
          OhmBlindLeistText = 
    " kvar"
          ScheinleistText= 
    "Scheinleistung : "&Scheinleist&" "&OhmScheinLeistText&crlf&"Blindleistung : "&BlindLeist&" "&OhmBlindLeistText
       
    End If
    End If
    Auch hier sieht der Code m.E. eleganter und lesbarer aus.

    So, ich hoffe, ich habe Dich jetzt mit meiner Antwort nicht erschlagen :sign0013:
    Aber wer fragt, muss auch damit rechnen, dass jemand ausführlich(!) antwortet... :)

    Viele Grüße
    specci48
     
  13. Bobbes

    Bobbes Active Member Licensed User

    WOW, vielen Dank specci48,

    Sach ma hast Du das Prog nochmal geschrieben:sign0188:

    Ich sach ja das sind alles so Kniffe die ich einfach noch nicht drauf habe.

    Es sind ja auch noch Fehler im Programm, z.B. werden die Daten in der Tabelle nicht richtig abgefragt.

    Vielleicht hast du da ja auch noch eine Idee.

    bei der Querschnittsberechnung z.B. wenn der eingegebene Strom größer ist als der vom Prog ausgesuchte Stromaus der Tabelle, verwendet er trotzdem den Strom aus der Tabelle.

    MfG
    Bernd
     
  14. specci48

    specci48 Well-Known Member Licensed User

    Nö, nur mal etwas genauer hingeschaut... ;)

    Hmmm.... ich bin leider kein Elektriker und habe auch das Programm selbstverständlich nicht komplett durchschaut. Aber ich versuche mal zu raten:
    Bisher sehen die Zeilenpaare so aus (ohne meinem Verbesserungsvorschlag):
    Code:
    If Spalte = 1 AND txtQuerStrom.Text <= tableVerlegeart.Cell("A1/2",Reihe) Then 
      QuerTabelle = tableVerlegeart.Cell (
    "mm²",reihe+1)
      MaxStrom = tableVerlegeart.Cell(
    "A1/2",Reihe)
      QuergrosserQuertabelle = 
    "Querschnittvorschlag : "&Round(Quertabelle,2)&" mm²"
    End If
    If Spalte = 1 AND txtQuerStrom.Text >= tableVerlegeart.Cell("A1/2",Reihe) Then 
      QuerTabelle = tableVerlegeart.Cell (
    "mm²",reihe+1)
      MaxStrom = tableVerlegeart.Cell(
    "A1/2",Reihe)
      QuergrosserQuertabelle = 
    "Querschnittvorschlag : "&Round(Querschnitt,2)&" mm²"
    End If
    Wenn ich das richtig verstanden habe, prüfst Du den eingegebenen Stromwert txtQuerStrom.Text gegen einen vorher (per Reihe) bestimmten Tabellenwert tableVerlegeart.Cell("A1/2",Reihe). Aber egal, ob der eingegebene Wert kleiner/gleich der Tabelle ist (erstes If) oder der eingegebene Wert gößer/gleich der Tabelle ist (zweites If), es wird in beiden Fällen das Feld für den maximalen Strom aus der Tabelle gefüllt (MaxStrom = tableVerlegeart.Cell("A1/2",Reihe)).
    Liegt ggf. hier der "Hase im Pfeffer" :confused:

    Ich hoffe Du kannst mit meiner letzten Analyse etwas anfangen.

    Viele Grüße
    specci48
     
  15. Bobbes

    Bobbes Active Member Licensed User

    Alles klar ich habs hingekriegt.

    Danke Euch nochmal !!!:sign0060::sign0060:

    Gruß
    Bernd
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice