Wie kann ich in einer anderen Tabelle nach Datum und dazu passenden Datensatz Treffern suchen?
Ninox Profile

Ich sitze grad an der letzten Nuss meiner aktuellen kleinen Anwendung. Hier möchte ich in einer anderen Tabelle nach möglichen Treffer Datensätzen über Datumangaben suchen lassen und wenn Treffer vorhanden sind, von dort bestimmte Felder in meine Suchtabelle in entsprechende Felder eintragen lassen.

Um zu verdeutlichen welche Felder in beiden Tabellen für die Suchaktion zur Verfügung stehen, habe ich dazu ein kleines Beispiel gebastelt - siehe Screenshot. Hat hier vielleicht jemand eine Idee?

 

 

 

B

Idee schon..., wie soll die Suche ausgelöst werden?

B

... einen Button in der Abfragetabelle mit Code:

let SuchDatum := 'Heutiges Datum Abfragetabelle';

let Satz := first(select 'Haupttabelle' where 'Datum A' = SuchDatum);

if Satz != null and '1. Suchtext aus Haupttabelle' != null then

    '1. Suchtext aus Haupttabelle' := Satz.'Text 1';

end;

 

so sollte es mit dem ersten Datum gehen, ist nur ein Beispiel...

testen und weiter machen...

Ninox Profile

Hi Bernd.

Ich danke vielmals. Das klappt ja wirklich :-) Und sogar genau so wie ich es vorhabe. Ich habe zwar eine Stunde geflucht weil es erst nicht ging in gefühlt 70 Variationen, dann aber - VON ALLEINE! und durch Zufall - gemerkt, dass es in der vorletzten Zeile  "=null then" heissen muss und nicht "!=null then". Er hatte dann nur was eingetragen wenn schon was im Suchtext drin stand und es soll ja andersherum sein :-)

Vielen, vielen Dank! Nun kann es weiter gehen mit der Bastelei :-)

Ninox Profile

Wie bekomme ich es dann noch hin wenn mehrere Treffer in der Haupttabelle gefunden werden, diese an den ersten Treffer anzuhängen?

Es können ja auch mehrere Treffer mit Datum A vorhanden sein. In diesem Fall trägt er nur den ersten gefundenen Treffer in Suchtext 1 ein. So zwei bis vier sollten aber ruhig übertragen werden - wenn denn soviele vorhanden.

 

 

B

let SuchDatum := 'Heutiges Datum Abfragetabelle';

var Text := "";

for Satz in (select 'Haupttabelle' where 'Datum A' = SuchDatum) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

 

if Satz != null and '1. Suchtext aus Haupttabelle' != null then

    '1. Suchtext aus Haupttabelle' := Text;

end;

 

hier wird eine Schleife durchlaufen, alle Datensätze mit dem gleichen Datum. Getrennt werden die einzelnen Texte durch ein "; " (if - Anweisung), damit besser unterschieden werden kann. Kann natürlich auch geändert werden...

Ninox Profile

Wie wäre es mit einer Ansichtstabelle mit der Formel:

---

let SuchDatum:='Heutiges Datum Abfragetabelle';

select 'Haupttabelle' where 'Datum A' = SuchDatum

---

dann kannst du direkt zu den jeweiligen Datensätzen in der Haupttabelle springen

 

Leo

Ninox Profile

Wow.... Klappt auch :-)

Nun brauche ich nur noch eines: Dass er auch die Datum B, Datum C und Datum D Einträge findet falls vorhanden und an die Textkette anhängt. Aber das nur dann wenn sich der Datensatz nicht in einem der vorherigen Datumstreffern befindet. Also wenn ein Datensatz z.B. bei Datum A und Datum B gefunden wurde, reicht es den Datensatzfund einmal als Text anzuhängen.

Ich habe es mit 4 Textfeldern probiert und bekomme dann zwar Datum A Funde ins erste Feld, Datum B ins zweite Feld usw. Aber eben auch wenn ein Treffer in Datum A schon gefunden wurde, trägt er es in Datum B auch noch mal ein. Genau das soll nicht.

Eigentlich will ich alles in einem Textfeld gesammelt haben was am Suchtag gefunden wurde. Aber max. eben nur einen Datensatz und keine Doppelten.

Ninox Profile

Hi Leo....

Ich brauche die Ergebnisse nur als Textausgabe. Das reicht mir für diesen Fall bzw. ist der Sinn. Es ist immer noch für meine Reisekostengeschichte. Eigentlich soll nur geschaut werden welche Aufträge wurden am heutigen Tag bearbeitet und diese Auftragsadressen werden dann in das Textfeld "Reisegrund" eingetragen. Das klappt im Kern schon besser als ich dachte und spart einem später wieder viel Tipparbeit auf der Straße :-)

 

Ich habe da aber - neben der Datum A, B, C, D Nummer noch ein letztes Schmankerl:

Angenommen ich fahre los um einen Auftrag zu bearbeiten. Die Fahrt ist lang und man kommt erst spät an, macht nichts mehr beim Kunden. Dann fehlt der Eintrag Datum A, Datum B, Datum C oder Datum D ja in dem Auftrag. Was dann nur im noch leeren Auftrag drin steht wäre nur der Termin. In diesem Falle könnte Ninox erstmal diesen als Vergleich herannehmen und den Reisegrund daraufhin eintragen.

Bernds Formel funktioniert aber irgendwie nicht bei dem Terminfeld (Datum und Uhrzeit Feld). Das wäre also quasi das dritte Datumsfeld was noch durchsucht werden könnte. Aber eben nur zum Einsatz kommen soll wenn in den anderen A,B,C,D Datumsfeldern nichts gefunden wurde.

B

ich würde Leo's Variante auch vorziehen..., gibt mehrere Möglichkeiten dadurch...

 

let SuchDatum := 'Heutiges Datum Abfragetabelle';

var Text := "";

for Satz in (select 'Haupttabelle' where 'Datum A' = SuchDatum) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

for Satz in (select 'Haupttabelle' where 'Datum B'= SuchDatum) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

 

for Satz in (select 'Haupttabelle' where 'Datum C'= SuchDatum) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

 

for Satz in (select 'Haupttabelle' where 'Datum D'= SuchDatum) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

 

if Satz != null and '1. Suchtext aus Haupttabelle' != null then

    '1. Suchtext aus Haupttabelle' := Text;

end;

 

erst wird Datum A abgefragt, dann Datum B, ...

Reply