Announcement

Collapse
No announcement yet.

String x-mal zurückgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String x-mal zurückgeben

    Mahlzeit!

    Ich arbeite mit einem in Delphi mit ADO geschriebenen Programm, mit dem ich auf eine Access 2003 Datenbank zugreife und sql-Abfragen eingeben und ausführen kann.

    ich such im Netz jetzt schon seit über zwei Stunden eine Möglichkeit, einen String x-mal (abhängig von einem Wert in 'Tabelle') zurückzugeben

    Im Endeffekt soll das ganze dann so aussehen:

    select Index,(numerisches_Feld*'Text')&'!' FROM Tabelle where (Bedingungen)

    (die Abfrage ist eigentlich ein ganzes Stück komplizierter, ich habe sie jetzt nur aufs Wesentliche gekürzt)
    Wobei die grünen Sachen jetzt nur Platzhalter und der rot dargestellte Text im Prinzip das ist, was ich erreichen will. Nur so funktioniert es eben nicht.
    Lasse ich alles rote weg, bekomme ich, natürlich unabhängig von 'numerisches_Feld' immer nur 'Text!' zurück, ich möchte aber, wenn 'numerisches_Feld' z.B. 3 ist, 'TextTextText!' zurückbekommen.

    Ich hoffe ich konnte mein kleines Problem einigermaßen deutlich beschreiben.

    bin kein sql-Genie, deshalb hoffe ich immer noch, dass das ohne größere Probleme möglich ist - ich wäre sehr dankbar

    Yan

    [edit]
    ach so, eine WENN-DANN-Geschichte á la IIf scheidet aus, da Werte von 0 bis ca 200 erreicht werden können

  • #2
    Hi,

    muss das unbedingt innerhalb der Abfrage geschehen? Du kannst doch den Datensatz normal lesen und Dir dann Deinen mehrfach-String in Delphi zusammenbauen.

    Gruß
    docendo discimus

    Comment


    • #3
      Hallo,

      ja, es muss leider in der Abfrage geschehen, um die Kompatiblität mit anderen Versionen der Software selbst und einem anderen Programm, welches auch auf die DB zugreift und die gleichen Abfragen benutzt, zu wahren.

      Comment


      • #4
        SELECT left( left(Tabelle1.text,len(Tabelle1.text))+
        left(Tabelle1.text,len(Tabelle1.text))+
        left(Tabelle1.text,len(Tabelle1.text))+
        left(Tabelle1.text,len(Tabelle1.text))+
        left(Tabelle1.text,len(Tabelle1.text)),
        len(tabelle1.text) *numerisches_Feldl)
        FROM Tabelle1;

        ginge z. B., wenn der Maximalwert für numerisches Feld 5 wäre, ansonsten müsstest Du den Ausdruck
        left(Tabelle1.text,len(Tabelle1.text)) entsprechen öfter aufführen.

        Gruß
        docendo discimus

        Comment


        • #5
          Danke schön!

          Auf die Idee war ich beim besten Willen nicht gekommen.

          Da es sich bei dem Text um einen festen, vierstelligen String handelt, konnte ich deine Anweisung für meine Zwecke noch vereinfachen:

          SELECT left('TextTextTextTextTextTextTextTextTextusw.',4* numerisches_Feld)
          FROM Tabelle

          Natürlich hab ich den Text bei mir über 200 mal in den String eingefügt, und jetzt funktioniert das Ganze so wie es soll.

          Ich hatte mich irgendwie auf ein numerisches_Feld*'Text' versteift, weil das wesentlich eleganter gewesen wäre und ich vorher keinen Maximalwert kennen muss - aber wenn es nicht anders geht ist das hier ja auch eine simple und schlelle Lösung.

          Vielen Dank nochmal!

          Yan

          (warum wurde das Thema denn nach "MS ACCESS" verschoben? es geht doch nicht um ein Access- sondern ein SQL-Problem... naja, ist ja jetzt erledigt)
          Zuletzt editiert von YAN_B; 04.09.2008, 07:25.

          Comment


          • #6
            Originally posted by YAN_B View Post
            ...(warum wurde das Thema denn nach "MS ACCESS" verschoben? es geht doch nicht um ein Access- sondern ein SQL-Problem... naja, ist ja jetzt erledigt)...
            Weil es eben KEIN SQL-Problem ist. Solch eine Verkettung ist mit "purem" SQL nicht möglich. Dafür werden entsprechende Funktionen benötigt (wie z.B. jetzt LEFT()), die je nach DBMS unterschiedlich sind. Und damit ist es ein Access-Problem! Eine Lösung , die z.B. in MySQL funktioniert:
            [highlight=sql]
            select Index, RPAD('Text', 4*numerisches_Feld, 'Text')
            FROM Tabelle where (Bedingungen)
            [/highlight]
            nützt dir wahrscheinlich für Access nichts!

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Sorry, ich wusste nicht, dass z.B. LEFT() Access-spezifisch ist - wieder was gelernt.

              Und RPAD() funktioniert in Access tatsächlich nicht. Ich werde wohl bei der etwas "unsauberen" Lösung bleiben.

              Gruß,
              Yan

              Comment

              Working...
              X