Laden...
T
ThomasE.
myCSharp.de - Member
42
Themen
461
Beiträge
Letzte Aktivität
vor einem Jahr
Dabei seit
26.11.2013
Erstellt vor einem Jahr

Hallo T-Virus,

danke für deine Antwort.

Du hast ja recht das das ganz von der Situation ankommt. Generell wäre die 2. Lösung denk ich von der DB-Performance her besser als die Erste..

Indexe gibt es generell auf alle Primary-Keys, sonst nicht. Dennoch wird auch mit like gesucht (ist indirekt konfigurierbar), sowie extra gejoint usw. zudem sind die DB Tabellen in der Regel viel größer. Die erste Variante bläst die Kommandos ziemlich stark auf und es wird doch unübersichtlicher.

Die Zweite die Models.. wäre aber denk ich wesentlich überscihtlicher, auch wenn es nicht schön ist.

Erstellt vor einem Jahr

Oder wäre diese Lösung besser:

SELECT a.Id,     a.Nr,     a.Field1,     a.Field2, 
       b.IdEdit IS NOT NULL AS HasEditLine, 
       b.IdEdit, b.NrEdit, b.Field1Edit, b.Field2Edit, b.Field3Edit -- Wenn in Table2 die Namen mit dem Suffix Edit ergänzt werden
FROM Table1 AS a
LEFT JOIN Table2Edit AS b 
       ON a.Id=b.IdEdit

Im Code müsste das Model erweitert werden, sodass alle Daten vorhanden sein können.

In dem Fall müsste man im Code entsprechend darauf reagieren.

Sollte von der Performance her wesentlich besser werden oder?

Auch wenn ich das jetzt nicht unbedingt schön finde...

Erstellt vor einem Jahr

Verwendetes Datenbanksystem: Microsoft SQL Server 2017

Die Lösung die Benötigt wird, ist folgende:


Table1
- Fields: Id (Key), Nr (Key), Field1, Field2

Table2
- Fields: Id (Key), Nr (Key), Field1, Field2, Field3

Daten1
0, 10, Text1, Text2
1, 11, Text1, Text2
2, 12, Text1, Text2

Daten2
1, 11, Text1 edit, Text2 edit, Text3

Es müssen immer die Daten aus beiden Tabellen selektiert werden. Es sollen mit Priorität, wenn mit denselben Schlüssel in Daten2 ein Satz vorkommt, auch dieser verwendet und der aus Daten1 ignoriert werden.

Also das Ergebnis sollte dann so aussehen:

0, 10, Text1,      Text2,      ''
1, 11, Text1 edit, Text2 edit, Text3
2, 12, Text1,      Text2,      ''

Meine derzeitige Selektion sieht so aus:

SELECT m.Id, m.Nr, m.Field1, m.Field2, m.Field3
(
    SELECT a.Id, a.Nr, a.Field1, a.Field2, CAST('' AS NVARCHAR(256)) as Field3
    FROM Table1 a
    LEFT JOIN Table2 b
    ON a.Id=b.Id
    WHERE b.Id IS NULL
    
    UNION ALL
    
    SELECT Id, Nr, Field1, Field2, Field3
    FROM Table2
) m

Table2 ist eine Tabelle, in der nur Datensätze vorhanden sind, die gerade bearbeitet werden. Daher man diese Änderungen zurücksetzen kann, ist diese Vorgehensweise notwendig. (vielleicht gibt es von der grundsätzlichen Idee her eine bessere Lösung?)

Table1 sollte vom aktuellen Stand nicht geändert werden, da es sonst zu breaking changes kommt, die eine menge Anpassungen rund um den Server fordern würde.

Mit diesen süßen kleinen Beispiel sieht es nicht so arg aus, bei größeren Tabellen wird es dann schon sehr unübersichtlich.

Zudem können noch weitere WHERE bzw. JOIN Klauseln hinzukommen, die das UNION nochmals filtern werden. (Auch  TOP, ORDER BY, OFFSET...) Innerhalb des UNION sollte sich nichts mehr ändern.

Meine eigentliche Frage ist die, ob die Art der Selektion auf diese Weise annehmbar ist oder es eine bessere Lösung gibt?

SG Thomas

Erstellt vor einem Jahr

Wow, ihr seid echt super! Besten Dank!

Habe es mit 5 versch. Varianten versucht, der Knopf ist mir jedoch nicht aufgegangen...

Einen self-join habe ich dabei gar nicht bedacht... 🙂

Vielen herzlichen Dank!
Schöne Grüße, Thomas

Erstellt vor einem Jahr

Verwendetes Datenbanksystem: Microsoft SQL Server 2017

Habe eine (zumindest für mich) Kopfnuss zu lösen. Zuerst dachte ich mir das es nicht so schwer sein kann. Nun bin ich am Ende.

Folgendes Beispiel:


Table
- Fields: Id (Key), Nr (Key), Field1, Field2, IsSet (Key->bit)


Daten
0, 0, Text1, Text2, 0
0, 1, Text1, Text2, 0
0, 1, Text1, Text2, 1

Es sollen immer die Sätze selektiert werden, die am letzten Feld den höheren Wert besitzen, in dem Fall 1 bzw. 0.
Der Satz mit 0 ist immer vorhanden, der Satz mit 1 ist optional, muss aber im Ergebnis bevorzugt werden. Wenn er existiert, selektiere ihm, wenn nicht, dann den mit 0.
(Der Typ bit könnte in dem Fall auch ungünstig sein...)

Der 2te Schlüssel Nr wird dabei nicht berücksichtigt. Eventuell ist es so gar nicht möglich.


Das Ergebnis sollte am Ende so aussehen:
0, 0, Text1, Text2, 0
0, 1, Text1, Text2, 1

Das kann doch nicht so schwer sein oder doch?
(Hab mir mit dem Titel schwer getan, hoffe das passt so)

SG Thomas

Erstellt vor 2 Jahren

Hallo Abt,

danke für die Infos.

Ja ich habe das genauso verstanden wie du sagst. Und genau das habe ich durch mehrere Male versucht ihm das beizubringen.

Diese Sache mit dem Submit habe ich nicht ganz durchschaut, bisher gab/gibt es keinen "submit" in der Lösung in dem Bereich (<form/>), nur versch. Buttons/Inputs, reicht das auch schon ohne explizitem "submit"?
Denn es funktioniert bisher bei Firefox und Chrome ohne dem, ohne Probleme bei einfachen Text input-Feldern. (Andere Browser weiß ich nicht)

Aber wie gesagt, ich habe testweise auch so ein "submit" Button hinzugefügt..

Hast du selbst damit Erfahrung bei <textarea>?

Komme erst wieder dazu mir das anzuschauen, könnte etwas dauern..

Vielen Dank mal fürs Erste!
SG Thomas

Erstellt vor 2 Jahren

Hallo zusammen und alles Gute im neuen Jahr!

Ich habe hier ein Problem, wie die Überschrift schon beschreibt, benötige ich die Funktion in einem <textarea>, nämlich das Attribut autocomplete.
(zumindest für Chrome und Firefox, aktuelle Versionen)

Laut der Doku im Firefox, sollte es funktionieren. Es sind alle Vorgaben gegeben:

Note: In order to provide autocompletion, user-agents might require <input>/<select>/<textarea> elements to:
Have a name and/or id attribute

Be descendants of a <form> element

The form to have a submit button

https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete

Das was im Grunde nicht vorkommt ist ein "submit"-Button, den ich aber testweise mal so hinzugefügt habe.

Der erste Versuch war mit autocomplete="on" der zweite Versuch mit autocomplete="given-name", beides leider erfolglos.

Chrome hab ich mir noch gar nicht angesehen. Hatte schon mal wer dieses Problem?

Sollte ich auf einen Holzweg sein, bitte um Info 😉

Schöne Grüße,
Thomas

Erstellt vor 3 Jahren

Ein Tutorial in Schriftform wäre natürlich auch gut. Aber halt praktisch veranlagt, wo man ein Projekt beginnt und am Ende ein Ergebnis hat. Das Visuelle ist für mich was ganz ganz wichtiges. Wo man sieht wie die Zusammenhänge sind, wie die Rädchen ineinander greifen und wo man das nicht anhand der Theorie erklärt bekommt, womöglich noch mit haufenweise Fachbegriffe. Ich glaube das sind die Worte die es richtig beschreiben. Ich brauche den praktischen Bezug.

Hey, ich verstehe dich in gewisser Weise, da ich auch mal an der Stelle war.
Der Unterschied: Ich wußte von Anfang an, dass eine gute Mischung von Theorie und Praxis für mich die beste Wahl ist. Mir hat dabei auch das Buch "C# von Kopf bis Fuß" _Unterstützung _geleistet. (Ist leider schon älter aber für die Basis ausreichend)
Von einer Gehirntransplation würde ich eher absehen 😉 deshalb muss man es selbst ins Hirn bekommen.

Die Frage wäre eher, ob ich mir eingestehen müsste, dass ich einfach nicht dafür gemacht bin und in dieser Sache einfach zu dumm bin.

Äehm, ich kann dir sagen, nein. Zu dumm sicher nicht. Entweder ist man für sowas oder nicht. Wenn das Interesse so groß ist, dass man es einfach nicht lassen kann, ist es schon mal ein guter antreiber. Ich glaube einfach, dass du zu ungeduldig bist.

Natürlich will ich nicht ohne Doku auskommen. Ich muss die Doku, bzw. was da steht aber erstmal verstehen bevor ich damit arbeiten kann.

Der Knoten im Kopf muss sich lösen, dann der große: AHA - Effekt
Den hatte ich in einem Buch (C++), da ging es über die verknüpfe Liste, die heutige "LinkedList". Die mußte man darin selbst erstellen. Im Urlaub in der Sonne habe ich mir dieses Kapitel so lange in meinem Hirn einbalsamiert, bis ich es kapiert habe und sich einige Gehirnknoten gelöst haben. 😁

Vielleicht ist aber auch ein Punkt erreicht, wo es grob gesagt mit "Nachmachen" und "Auswendig lernen" nicht mehr getan ist.

Auswendig lernen hatte ich eigentlich fast nie müssen. Lesen und verstehen, was man liest gemischt mit Interesse, ist es auch schon im Hirn...
Nachmachen ist nur ein kleiner Aspekt. Verstehen **was **man nachmacht dagegen schon mehr.

Ich kann mir vorstellen, dass es für euch, die ihr es verstanden habt nur schwer vorstellbar ist, wie man das nicht verstehen kann. Ist doch alles logisch.

Naja, das mal so vorweg nehmen würde ich nicht, du kennst ja keinen 😉

Über die 20 Jahre wo ich mich hobbymäßig (mal intensiver und mal gar nicht) mit dem Thema Scripting und Programmierung schon befasse

Ich kenne das, zwar nicht soo lange aber es waren sicher ~8 Jahre. Bringt halt nicht viel, wenn man ständig irgenwie dainwackelt und man öfters mal besoffen die Zeit vergisst, so wie es bei mir war 😄, und andere Dinge wichtiger waren, so auch die Arbeit die man gerade hat.
--> Mehr Zeit intensiver nützen, ohne längere Pausen, sonst ist es wie schon gesagt, ein dahinwackeln ohne Sinn und Ziel, das motiviert einen auch gar nicht.
Mehrere kleine Projekte fertigschreiben und sich darüber freuen bring wesentlich mehr 😉
Zudem erspart man sich auch die Hälfte der dahingewackelten Zeit...

Erstellt vor 3 Jahren

Ich denke er meint, wenn die Funktion parallel öfters aufgerufen wird, dass es da zu Problemen kommen kann und nicht die Logik in der Methode ansich.

Erstellt vor 3 Jahren

Hallo zusammen, danke mal für Eure Antworten.

Ein wenig zum Hintergrund:
Es ist eine Änderung im alten Source, der basiert auf dem Framework 4.6.2 und das ändert sich auch nicht mehr.
Die Methode die aufgerufen wird ist noch eine WCF Methode, da habe ich keinen Einfluß drauf.
Die 'null' Parameter sind optionale, um das Dokument in einer bestimmten Version zu holen oder so ähnliches, also nichts tragisches.
Es gibt in der WCF Schnittstelle nur diese eine Methode, um eine Datei mit Annotationen zu erhalten. Das ist auch der Grund der Änderung/Erweiterung.
Den Service den ich verwende ist schon ein fertiger Proxy für die WCF Anbindung. Ebenfalls keinen Einfluß drauf.
Der Rückgabewert ist ein Stream, also die abstrakte Basisklasse. Weiß aber das von der WCF Schnittstelle ein Filestream übergeben wird.

Die Dateien um die es hier geht sind in der Regel nicht größer als 2MB, wollte mich damit aber nicht zufrieden geben.
Sah in die Doku und war verwirrt 😉

Aber ich denke ich habe schon verstanden und lag auch bei meiner Verwirrung da wohl nicht ganz falsch.

Die bessere Lösung ist sicher paketchenweise zu lesen und gleich auf die Platte zu schreiben, eben auch wegen dem RAM.
Obwohl es immer nur 1 Datei ist, ist es vom Logischen her einfach besser umgesetzt.

Die Lösung gibt es schon, hole eine Datei und schicke sie mit anderen Parametern zu einem anderen Verarbeitungssystem.
Der Unterschied um das es hier jetzt geht, es sollen die Annotationen mit exportiert werden als fixer Bestandteil des Dokuments.
Die andere vorhandene Methode hat es etwas einfacher, die bekommt gleich ein byte Array und keinen Stream.