German Tabelle als Datenpool

Bobbes

Active Member
Licensed User
Longtime 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
 

klaus

Expert
Licensed User
Longtime 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:

Bobbes

Active Member
Licensed User
Longtime 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
 

Bobbes

Active Member
Licensed User
Longtime 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
 

klaus

Expert
Licensed User
Longtime 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.
 

Bobbes

Active Member
Licensed User
Longtime User
schade, naja dann mache ich mal so weiter

Kommst Du aus Lauterbach ?

MfG Bernd
 
D

Deleted member 103

Guest
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
 

Bobbes

Active Member
Licensed User
Longtime 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
 
D

Deleted member 103

Guest
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.
 

Bobbes

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

Gruß
Bernd
 

specci48

Well-Known Member
Licensed User
Longtime 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:
B4X:
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
B4X:
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
B4X:
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
B4X:
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
B4X:
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
 

Bobbes

Active Member
Licensed User
Longtime 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
 

specci48

Well-Known Member
Licensed User
Longtime User
Sach ma hast Du das Prog nochmal geschrieben
Nö, nur mal etwas genauer hingeschaut... ;)

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.
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):
B4X:
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
 

Bobbes

Active Member
Licensed User
Longtime User
Alles klar ich habs hingekriegt.

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

Gruß
Bernd
 
Top