Laden...
V
Benutzerbeschreibung
Ich liebe SQL 🙂

Forenbeiträge von Viper78 Ingesamt 162 Beiträge

14.07.2010 - 09:50 Uhr

Hi,

wenn man sich auf das Schema verläst, ist man verlassen.
Nur der

 Select Count(*) from Tabelle

gibt zuverlässig die Menge aus.
Beim MSSQL bin ich häufiger mit falschen Zahlen enttäuscht worden.
Mach es lieber selber zu Fuß.

12.07.2010 - 12:32 Uhr

Hi,

du kannst auch auf Views ein UPDATE durchführen.
Den passus WITH CHECKOPTION solltest du dazu in die VIEW mit aufnehmen.
Auch darf die VIEW kein Join haben.

Ob der EF4 das mit macht weiß ich nicht.

05.07.2010 - 12:54 Uhr

Hi,

ich hab keine Lösung für dein Problem, leider.
Aber warum verwendest du den ODBC Treiber und nicht den von .Net???
IBM wird doch eine ADO.NET Provider haben.
Vielleicht hast du damit dein Problem nicht mehr.

MfG
Björn

05.07.2010 - 12:00 Uhr

Hi,

da ich aufgefordert wurde was brauchbares hier zu schreiben, gebe ich nun eine hoffentlich bessere Antwort.

Gesetz für Gewerbliche Software/Digitale Inhalte:

Wenn die Software zum Telefonieren dient und Verträge geschlossen werden gilt 6-7 Jahre.

Ich find es bedenklich, auf Grund der Tatsache das ein Datensatz aus TaSW gelöscht wird auch eine Job zu löschen.
Dieses dürfte nur passieren wenn der andere FK aus TaSW auch gelöscht werden soll.
Solange ein TaSW.pSW noch lebt, so sollten auch alle Referenzen in TaJOB noch leben bleiben.
z.B. für eine History/Statistik: Wieviele Gespräche hat TaSW.pSW geführt. Dies geht dann nicht mehr.
Auch ist das eine TaSW 1:N TaJob beziehung und somit gibt es n:M Kombinationen.

Da ich aber nur die halbe Warheit kenne, must du es eben selbst entscheiden.

@Jelly
Zu den kosten von Speicher:
Wenn ich sage Autos sind bezahl bar, dann hättes du mir gesagt ein Ferrarie kostet 300.000 €.

MfG
Björn

04.07.2010 - 14:22 Uhr

Firebird, MSSQL Compact, SQLite
das sind Embedet Datenbanken.

Firebird kann auf jeden Fall Blob speichern. Ist gleichzeitig meine Empfehlung.

MfG
Björn

04.07.2010 - 11:32 Uhr

Hi,

du machst ja

 OdbcDataAdapter da = new OdbcDataAdapter(String.Format("select * from [{0}]", fileInfo.Name), connection);

Beim SELECT kannst du auch formatieren.
Must halt ein wenig nachlesen.

MfG
Björn

04.07.2010 - 11:20 Uhr

Falch

 cmd.CommandText = "SELECT user" + "FROM key"

Rcihtig

 cmd.CommandText = "SELECT user FROM key"

Es fehlt ein Leerzeichen bei user und From!
Die meldung sagt es ja schon.

MfG
Björn

02.07.2010 - 13:52 Uhr

Hm,
Festplatten kosten nix.
Löschen macht man nicht.
Man archiviert nur.
Als Firma muss man 5-10 Jahre lang Digitale Daten aufbewahren.

02.07.2010 - 12:37 Uhr

HI,
man löscht nicht.
Mach dir eine Spalte Deleted = 0 / 1
Dann hast du die Probleme nicht und baust es natürlich in den Rest ein.

02.07.2010 - 10:20 Uhr

Diese Parameter-Methode finde ich sehr aufwändig.. wenn ich das normal mit einer kurzen Zeile lösen kann, wofür dann den Aufwand? Hm.. ich seh schon, kein Support für ne einfach Lösung. 😦

Hi,
das Richtige ist nicht immer das einfachste.

Nochmal Lesen und umsetzen. Alleine schon der Sicherheit wegen.

[Artikelserie] Parameter von SQL Befehlen

02.07.2010 - 07:05 Uhr

TIP: UPDATE [TABELLENNNAME] WITH (ROWLOCK) ....

Das kann schon viel helfen, wenn kein Pagelock mehr gemacht wird.
Und bei 15 Benutzer wirst du keine Performanc probleme wegen Rowlock bekommen.

01.07.2010 - 22:59 Uhr

Hey ,
das ist mal ein brauchbare Antwort 😃
Wenn ihr nur max 15 User habt und keine Jobs dann solltgest du keine Deadlock haben.
Deadlocks werden nicht so schnell aufgelöst wie du es hier schreibst. Im normalfall
dauern diese Minuten.
Ich bedauer das ich nicht mit 2008 arbeite.
Kann dir leider nichgt genau den passenden Tip geben.
Um den Fehler zu finden solltest du deine DB Architecktur unter die Lupe nehmen.

MfG
Bjön

01.07.2010 - 21:04 Uhr

With (NOLOCK) z.B. Die Doku ist hier.

Beik Express gibt es keine Priorisierung. Alle Prozesse sind gleichberechtigt.
Also functioniert dein Trick nicht (IsolationLevel), das gibt es nur in der Bezahlversion.

Deine Meldung sagt das ein Anderer SQL Prozess deiner Transaction den zugriff verweigert.
Das heist ein anderer SQL-Prozess arbeitet auf der Tabelle.
MSSQL macht standartmässig Pagelocking und nicht Rowlocking.

Vorgehensweise:
Wenn ein Deadlock auftritt must du dir mit den SQL-Tools alle Jobs anschauen.
Die Jobs die auf einen warten werden dort angezeigt.
So bekommst du dann die Info welches SQL das Problem verursacht.

Wenn ich/das Forum helfen soll must du erst mal die SQL posten. Dazu bitte die Tabellen Strucktur mit Index/PK.
Generell ist das weniger ein Problem für ein Forum.
Es gibt auch Profiler Software für SQL Server, die da mehr infos gibt.
Wieviele Transaktionen pro Minute habt ihr?

Viel erfolg beim Fehler finden.

MfG
Björn

01.07.2010 - 16:48 Uhr

WHERE (ref_staff_member IS NOT NULL)

hier muss es heißen:
WHERE (ticket.ref_staff_member IS NOT NULL)

01.07.2010 - 14:49 Uhr

Hey,

jetzt wird es spannend.
Welche Edition des MSSQL hast du ?
Schon mal mit dem "WITH" beschäftigt?
Du kannst du feststellen auf welchen Prozess gewartet wird und dir dort das SQL anschauen + deins.
So kann man dir nicht helfen. Mehr Details bitte.

01.07.2010 - 13:42 Uhr

Also nimm dir meine Statmenst.
Versuche es mal genau nachzuvollziehen was da passiert.
Male es dir auf Papier auf, ja Papier.
Dann wirst du erkennen das man auch für den fall ein einfaches Update schreiben kann, analog zu meinen.

Wir wollen ja auch das du was lernst und nicht nur Lösungen bekommst ^^

TIP: Trigger?

Mach dir selbst erst nochmal einen gedanken und dann schreiben wir drüber ^^

MfG
Björn

01.07.2010 - 11:45 Uhr

Hi,

ja es geht.

Variante 1:

UPDATE ParenTabelle
SET ABGESCHLOSSEN = C.ABGESCHLOSSEN
FROM ParenTabelle as P,
ChildTabelle as C
WHERE P.GUID = C.GUID
AND NEIN = True
AND P.GUID = @GUID

Hier gehe ich von aus das es nicht wichtig ist ob True schon drinn steht. Hier kann es passieren das im Parent ABGESCHLOSSEN=True auf False überschrieben wird, wenn du es nicht vorher Prüfst.

Variante 2:

UPDATE ParenTabelle
SET ABGESCHLOSSEN = C.ABGESCHLOSSEN
FROM ParenTabelle as P,
ChildTabelle as C
WHERE P.GUID = C.GUID
AND P.ABGESCHLOSSEN = False
AND NEIN = True
AND P.GUID = @GUID

Hier kann aus der Tabelle Parent nur ABGESCHLOSSEN=False auf True gesetzt werden. Du must nicht Prüfen ob der Fall abgeschlossen war.

@GUI = dein Parameter

Da ABGESCHLOSSEN ein Boolean ist kannst du ihn einfach überschreiben.
Es gibt ja nur True/False und wenn False drinne steht bleibt es ja False.
Somit sind deine bedingungen in einem Statment erfüllt.

MfG
Björn

30.06.2010 - 14:18 Uhr

HI,

die Instanz must du nur angeben, wenn mehrere MSSQL Server auf einem Rechner/Server installiert werden.
[php] $host = "CHAOSSERVER";
[/php] Das wäre bei einer Instanz das richtige.

Benutzt du Linux oder Windows?
Ein paar Daten mehr wären toll.

30.06.2010 - 14:04 Uhr

Hi,#
auch hier Rätzeln die Helfert wieder was eigentlich gewollt ist.
Bitte sei doch so gut und schreib mal genau was du machen möchtest.

MfG
Björn

30.06.2010 - 11:10 Uhr

Hi,

auch wenn du Zeitdruck hast,
versuche doch mal das ganze Konzept in Frage zu stellen.
Du baust dir hier gerade immer selber Fallen ein.
Du must immer anpassungen schreiben, die bei einer vernünftigen Datenbankstrucktur und Konzept nicht notwendig sind.
Wenn du ein Diagramm hast schauen wir hier auch gerne drüber und geben dir Tips.

Wenn du ein neues Problem hast dann must du eine neuen Thread anfangen, nicht in diesem
ein neues vorbringen.

MfG
björn

30.06.2010 - 09:50 Uhr

Tabellen muste ich Namen ändern:

Nation
ID (PK)
Nation

Ort
ID (PK)
NationID (FK auf ID von Nation)
Ort

PLZ
ID (PK)
OrtID (FL auf ID von Ort)
PLZ

Dein FK weisen auf eine ID hin. Das solltest du in den Namen mit aufnehmen, dann weiß man als geübter DB'ler sofort bescheid.

Beispiel wie es funktioniert:

CREATE VIEW ComboBox
Select N.id as NationID, N.Nation, O.ID as OrtID, O.Ort, P.ID as PlzID, P.PLZ
FROM Ort as O, PLZ as P , Nation as NWHERE N.ID = O.NationID AND O.ID = P.OrtID 

So hast du schon mal sicher gestellt das die Beziehung stimmt.

Bedenke das es in einer Nation auch 2 gleiche Städte-/Ort-Namen gibt.
z.B. Frankfurt , Hamm, etc.

Falsch:

'SELECT * FROM ComboBox as C
WHERE c.Nation = '" + cbNation.Text + "'
AND c.Ort = '" + cbOrt.Text

Richtig:

'SELECT * FROM ComboBox as C
WHERE c.NationID = '" + cbNation.ID + "'
AND c.OrtID = '" + cbOrt.ID

Hab es mir hier einfach gemacht.
"cbNation.ID" und "cbOrt.ID" sind die ID vom angeklicken in der Combobox,
eben nicht der Name, da dieser nicht eindeutig ist!!!!!
Du must die Suche immer über die ID machen. Nicht über den Namen.
Alleine schon wegen der geschwindigkeit!!!

MfG
Björn

30.06.2010 - 09:20 Uhr

Hi,

hier kannst du die Software Firebird downloaden.

Hier hast du ein Administrations PDF.

Und hier ja die Offizielle Homepage.

Du benötigst für deinen Client :

  • NETProvider-2.5.2.msi
  • Firebird-2.5_xxxxxxx_Win32_embed_pdb.zip
    -FirebirdDDEXProvider-2.xxxx.zip

Für den Server lädst du halt zum Betriebssystem die Passende Version.
Beim entwickeln würde ich erst mal die Embeddet verwenden.
Außer du willst das Feature Event benutzen.
Das klapt nur mit der Server Version.

Viel spaß.

29.06.2010 - 20:00 Uhr

Embedet mit VB von mir in der vergangenheit geschrieben


'DB Name, Path der Anwendung, Logging
_DBName = Main.DB_NAME
_AppPath = Main.AppInfo.AppPathEntire

THWEinsatz.Tools.Logging.Log(New THWEinsatz.Tools.LoggingMessage(LOG_FILE_NAME, LogID.DBNew))

'ConnectionString Embeddet
_DBConnectionStringBuilder = New FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder
_DBConnectionStringBuilder.UserID = "SYSDBA"
_DBConnectionStringBuilder.Password = "masterkey"
_DBConnectionStringBuilder.ServerType = FirebirdSql.Data.FirebirdClient.FbServerType.Embedded
'Deutscher Satz :: WIN1252 :: DOS850 :: UNICODE_FSS
_DBConnectionStringBuilder.Charset = "UNICODE_FSS"
_DBConnectionStringBuilder.Pooling = True
_DBConnectionStringBuilder.Database = Database()
_DBConnectionStringBuilder.DataSource = Database()
_DBConnectionStringBuilder.Dialect = 3
'NeueDB
If Not System.IO.File.Exists(Database()) Then
'Erstell eine DB-Datei wenn die Datei nicht da ist.
' Pagesize = 4096 8192 alle anderen Werte sind unbrauchbar
' Wichtig!!! Forced Writes = True - [url]http://www.firebirdsql.org/manual/de/qsg2-de-safety.html[/url]
' False = Überschreibt keine Datei!!!
FirebirdSql.Data.FirebirdClient.FbConnection.CreateDatabase(_DBConnectionStringBuilder.ToString, 8192, True, False)

Viel erfolg. Die Datnebank macht spaß.

MfG
Björn

29.06.2010 - 19:04 Uhr

Also jedes Alter Table fügt die Spalten hinten an.

Erklärung beim MSSQL Server kannst du hier nachlesern.

Spalten werden hinten angehangen.

Das Alter Table ist eher eine schlechte sache. Überdenke das Konzept doch noch mal.

29.06.2010 - 16:58 Uhr

Hi,

also hier bin ich bei der Lösung auch faul.
Ich kann dir die Lösung nicht schreiben, da
man da einfach dein Wissen für benötigt.
Wie Mr. Bart Simpson schreibt Normalisiereung! Er hat recht.

Das ist eine Fleißarbeit für dich.

In deinem Falle gibt es mehrere gleich komplizierte Lösungen.
Es fehlt zum Beispiel der Hintergrund wieviele Daten gespeichert werden.
Eben wegen der Geschwindigkeit. Soll es 1 - N Attribute ermöglichen
oder ist es eher Normal das es max 20 Atrribute sind und ab und zu mal auf 25 anwächst?

Es fehlt hier z.b. welche SQL Datenbank Software du verwendest.
Bei einer MSSQL bist du auf 8000 Zeichen oder 4000 Unicodezeichen pro Row beschränkt.
Also würde es auf die dauer nicht gut gehen wenn du 8000/u4000 knacken würdest.
Wäre das der fall, dann würde dein Import vor die Wand laufen.
Also nachlesen ob es von der Datenbank Software beschränkungen gibt.

Wenn du max 1000 Datensätze in der Datei hast, dies Dynamisch speicher in der Datenbank.
Tabellen: Satz - SatzAttribute - SatzWerte
Ein Satz wird erzeugt beim Import. Alle Attribute werden dann gespeichert.
In Satz Werte ist dann [SatzID],[SatzAttributId], [Wert]
Dies kann man dann einfach per Dynamischer Abfrage/SQL selber zusammenbauen und darstellen.

Wie gesagt du must dir halt dazu noch mehr gedanken machen.

MfG
Björn

29.06.2010 - 14:48 Uhr

Ein SQL könnte so aussehen:

Oracle Syntax:


CREATE VIEW V_Bestellung_Count
SELECT Datum, ProduktID, Count(ProduktID) as Anzahl FROM Bestellung
GROUP BY Datum, ProduktID
;


SELECT ProduktName , Sum(Tag1) as Tag1, SUm(Tag2) as Tag2, Sum(Tag3) as Tag3 FROM
(
SELECT p.ProduktName,
p.ProduktID,
b.Anzahl as Tag1,
0 as Tag2,
0 as Tag3
FROM Produkt P , V_Bestellung_Count B
WHERE B.ProduktID = P.ID
AND B.Datum = TO_DATE('01.07.2010', 'DD:MM:YYYY')
UNION
SELECT p.ProduktName,
p.ProduktID,
0 as Tag1,
b.Anzahl as Tag2,
0 as Tag3
FROM Produkt P , V_Bestellung_Count B
WHERE B.ProduktID = P.ID
AND B.Datum = ( TO_DATE('01.07.2010', 'DD:MM:YYYY') + 1)
UNION
SELECT p.ProduktName,
p.ProduktID,
0 as Tag1,
0 as Tag2,
b.Anzahl as Tag3
FROM Produkt P , V_Bestellung_Count B
WHERE B.ProduktID = P.ID
AND B.Datum = ( TO_DATE('01.07.2010', 'DD:MM:YYYY') + 2)

) Temp
GROUP BY ProduktID, ProduktName


Das funktioniert auch Performant.
Generell ist das aber für Pivot-Tabellen und ReportingService.

MfG
Björn

PS: Das einrücken mit TAB wird immer zuerschossen beim speichern.... Sorry

29.06.2010 - 13:32 Uhr

HI,

ich vermeide es dir eine TIP zu geben,
da ich dein Problem noch nicht verstanden habe.
Deine Lösungsansatz erscheint mir als der falsche.
Liegt aber auch nur gefühlt dadrann, das nicht ganz klar rüber kommt
von welcher Textfileform du in eine SQL-Datenstrucktur transformieren willst.

MfG
Björn

29.06.2010 - 13:24 Uhr

HI,

also erst mal muss ich dich Fragen, wieviele Produkte gibt es.
Wieviele Bestellungen kann es Pro Tag geben und wieviel Rows hast du in der Tabelle?
Wie fett ist deine Hardwäre? Bleibt Sie immer unter 50% Auslasung?
Dann kannst du anhand dieser Zahlen eine abschätzung und Test machen.
Endweder machst du es Live oder aber per CronJob einmal in der Nacht.

Für das SQL brauch ich die Tabellen Strucktur.

MfG
Björn

28.06.2010 - 13:13 Uhr

Arbeitsablauf:

Ein einfaches Alter Table sollte einfachst gehen.
Wenn du auf der Spalte eine/mehrere Index/PK/FK hast dann lösche diese vorher.
Wenn es nicht klappt, dann Kopiere die Tabelle in eine 2te und dann erstellst du die Neue Tabelle mit neuer Strucktur.
Kopierst alle Daten nur die Int zu Float Spalte, da castest du, cast(name as float) .

MfG
Björn

28.06.2010 - 11:40 Uhr

Hi,

du must deinen Index bauen.
Und eine Suche zur verfügung stellen.
Es muss einen DB Provider geben. Da jede DB Software die Informationen anders Preis gibt.

  • Liest die System Tables aus.
    -- Baut sich aus den Informationen die Struckturen der DB-> Table -> Spalten auf.
    --- Liest den Text aus!

Nutzen wirst du dafür dann
System.Data.Common.DbProviderFactory

Mehr kann ich dir nicht sagen.
Vielleicht sollltest du dein Projekt auch mal besser erklären.

[Hinweis] Wie poste ich richtig?

MfG
Björn

PS: Kommentare wie "Sorry, aber deine Antwort ist totaler Käse." sind total überflüssig, freu dich lieber das du Antworten bekommst.

28.06.2010 - 09:27 Uhr

Beim Order BY

 .. "ORDER BY[UnitPrice]";
 

muss ein Leerzeichen zwischen BY und [

...  "ORDER BY [UnitPrice]";
 
28.06.2010 - 09:25 Uhr

HI,

du kennst den unterschied zwischen dem SQLServer Anmeldenamen und Benutzer?
Willst du Windowsauthentifikation benutzen oder die vom SQLServer?

Klingt eher nach dem Problem das du die Windowsanmeldung benutzt und da wird immer beim Anmeldename Domaine(Rechnername)\Benutzer verwendet.

MfG
Björn

26.06.2010 - 07:24 Uhr

Hm,

selbst eine Datenbank wie MSSQL 2000 speichert dort den Datentyp Bit in 1 Byts auf der Festplatte.
Dies ist sogar langsammer als wenn du einen Integer speicherst.
Wenn du 8 Spalten hast mit Bit, dann bleibt es auf der Festtplatte immer noch 1 Byte. Erst bei einer 9 Bit Spalte werden es 2 Byte. (Vor 10 Jahren war Festplattenspeicher noch richtig Teuer bei Servern: SCSI)

Also was für einen Grund hast du, daß du nur 1 Bit speichern willst.
Vorallem bedenke das es warscheinlich ist, das es langsammer ist, mit einem echten Bit, als mit einem Byte zu arbeiten.
Du must ja den Bit auch wieder in eine Bool Casten.

Ein BinaryWriter schreibt eben Byte weise. Du müstes einen ähnlichen Trick machen wie der MSSQL Server (siehe Oben).
Das würde sich lohnen vom Speicherplatz wenn du 8 Bits speichern willst.

MfG
Björn

25.06.2010 - 09:09 Uhr

HI,

nach dem Doppelklick eben die ID des Datensatzes auswerten und die Datenbank mit der ID neu abfragen nach den Details.
Das macht ihr nichts wenn es der PK ist oder wenigstens ein INDEX gesetzt wurde.

Wie man das mit Linq... macht kann ich dir nicht sagen muss mich da auch noch einarbeiten.

In deinem Beispiel suchst du mit Name das ist keine ID. Das wird bei Millionen Datensätzen immer langsammer und glänzt nicht von guter DB Programmiereung.

TIP:
Wikipedia und Normalisiereung einer DB

Zu ID:
Golo sein Blog
und
vom Herrn Buchner

Die eine ID muss unbeding hinein. Den Namen können im Leben Doppelt sein.
Beispiel: Mein Vorname + Name trägt noch einer beim THW in der Software. Ohne ID wäre da nur Chaos.

24.06.2010 - 22:12 Uhr

Hi,

Wenn du eine Index erstellst,
dann würde das nur gehen wenn du auf jeden INSERT, UPDATE und DELETE
einen Trigger hast der deinen IFilter INDEX updaten.
Auch wenn ich mir vorstelle ein Tabelle mit 120 Millionen Daten für IFilter zu indexieren Puh

Wenn überhaupt, dann must du die Datenbank benutzen.

Jetzt gehen wir mal realistisch vor.
Du schreibst ein Programm was aus den Systemtables dir Tabellennamen und Spalten ausliest.
Dieses kann über die Spalten suchen.

Jetzt findest du durch zufall eine Tabelle mit 400 Millionen einträge.
Erst erwischt du eine Spalte mit Index. Danach machst du eine Fulltablescan.

Das dauert ewig bei 400 MILLIONEN Datensätze. Auch auf schnellen Servern.

Das einzige was du machen kannst ist für ein Spezielles Projekt einen IFilter schreiben.
Welches dann in der DB vernünfig Optimierte Abfragen hat.

MfG
Björn

24.06.2010 - 16:13 Uhr

HI,

mir ist nicht ganz klar was du am Ende haben willst.

Soll es nun eine Excel Datei sein?
Einfach eine Quell datei erzeugen und diese kopieren und dann öffnen. Dann schau hier mal nach!

Hier mit kannst du dann .xls selber erstellen.

24.06.2010 - 14:26 Uhr

Hi,

in der Abeitswelt ist das immer etwas anders.

Ich bin jetzt von Privatem Handy ausgegangen.
Privat hab ich 6 Euro im Monat.

25 Euro im Monat + 300 Euro anschaffung und das alle 2 Jahre erneuern.

Da zahlt man
25 * 12 + (300 + 25) / 2 = 300 + 162,5 = ca. 462,5+300 € ( 38,6 € im Monat)
Die meisten Leute brauchen aber aber mehr Internet Traffic also nehmen sie den für 45 Euro.
45 * 12 + (170 + 25) / 2 = 540 + 97,5 = ca. 637 € (ca 53 € im Monat)
Monat * Jahr + (Neuanschaffung + Einrichtungsgebühr) = Jahreskosten

OK das ist alles vom Rosakonzern.

Wenn ich morgens 15 Min zur Arbeit fahre brauch ich kein Inet, etc.
Tip: Gute Zeitung lesen 😃

Zu den APPs:
Es gibt Symbian, Android, iOS4 und Bada. Die Apps laufen jeweils nur mit dem System.
Sind nicht portierbar. Man hat nur jeweils wenig auswahl.

So long...

24.06.2010 - 14:09 Uhr

Collation und Charset sind nicht das gleiche.....

Collation wird für die sortierun von varChar benötig.
Damit wird angegeben ob z.b. Groß und kleinschreibung beachtet werden beim Sortieren.

ORDER BY Name asc

oder wenn du z.b.: ü mit u vergleichst.

WHERE Name Like 'U%'

HIermit kannst du auch Ü erhalten, abhängig von deiner Collation.

CHARACTER SET
gibt den Standart vor wie der Char in der Tabelle gespeichert wird.
Warscheinlich ist es immer noch DB Standart.

Und was BernFfm beschrieb, wird sicher auch noch nötig sein.

24.06.2010 - 13:39 Uhr

ich würde gern eine Desktopapplikation erstellen, die Daten in einer Datenbank hält. Bisher habe ich das bei Desktopanwendungen über XML Dateien gelöst, was allerdings eher suboptimal ist.
@ gfoidl 😉){gray}

Dich verstehe ich nicht.
Warum schreibst du das? Er hat doch nur eine richtige Antwort gegeben.

24.06.2010 - 13:29 Uhr

Hi,

klar geht das.
wenn du von beiden die Quellen hast würde ich aber Vorschlagen, daß du die vom Alten Service nimmst und in den neuen einbaust.

Da du ja übers Netzwerk zu greifst bremst das deine Service aus.

24.06.2010 - 13:21 Uhr

Hi,

beim anlegen einer Datenbank, siehe hier, kannst du mit CHARACTER SET den Zeichentyp festlegen auf Unicode!!!

Beispiel:

CREATE DATABASE Test DEFAULT CHARACTER SET = 'utf8'

Alternative:
geht dies beim anlegen der Tabelle:

CREATE TABLE Test (
...
) DEFAULT CHARACTER SET = 'utf8' ;

oder

CREATE TABLE Test (
...
Test varchar(200) CHARACTER SET = 'utf8',
...
) ;

Viel erfolg

MfG
Björn

24.06.2010 - 13:06 Uhr

Hi,

ich würde Firebird vorschlagen wollen.

Als Embedet macht es eine gute Show. Unterstützt dann nur keine Events.
Wenn du dann später von Desktop auf Server-Client umstellen willst, must du wie oben beschrieben
nur die Verbindungsdaten ändern. Kopierst die lokale DB Datei auf den Server und fertig ist es.
Server kann Linux, Mac OS X und Windows sein.
Toll ist auch, daß man einfachst Backups auf DB ebene Programmieren kann.
Dies sorgt dann für die Datensicherheit.

Wenn du weißt, das dein Projekt eh auf Server-Client hinausläuft würde ich dir MSSQL + CE edition empfehlen. Sync scheint da super zu laufen 😃

PS: Hab gerade in der Pause ein Weizen in praller Sonne getrunken, ooOOhh , Rechtschreibfehler dürft ihr heute für euch behalten 😃

24.06.2010 - 11:14 Uhr

Hi,

ich hab kein Smartphone.

Vorteile:

  • Man kann mal eben im Internet recherche
  • Nützliche Apps, wie Navigation
  • Günstigere kommunikation als SMS z.B. mit ICQ / E-Mail

Nachteil:

  • Sehr groß
  • hohe Anschaffungskosten
  • hohe Vertragskosten
  • Apps kosten
  • Macht dumm, weil man für jede Situation ein App hat (Taschenrechner, Wikipedia, leo, etc)

Meinung:
Mann muss nicht immer überall erreichbarsein (MSN,ICQ,IRC,etc). Internet kann süchtig machen, also sollte man das auch nicht imm er dabei haben.

  • Handys sind zum telefonieren da!
  • Smartphones sind einfach zu teuer.
  • Apps sind nur auf eine Handymarke gebunden. Monokultur!!!
  • Mann muss nicht 24 Stunden am Tag mit dem Handy spielen. // Spiel mit deiner Freundin :evil:

Vertrag ist einfach zu teuer.
Hab noch andere ziele im Leben,
Haus kaufen,
Baum planzen,
Kinder 🙂

MfG
Björn

23.06.2010 - 09:18 Uhr

Schon mal über MEF nachgedacht?
Das ist eine erneuerund der System.Addin .

In meinem Programm selber lade ich über Reflection eine Klasse.
An diese kann ich alles Übergeben.

Für Net-Remoting hab ich ein Bild Serialisieren müssen.
Ich wandel das Bild in eine Byte-Array um. Dieser ist dann Serialisier bar.
Das Funktioniert genauso wie man ein Bild in einem Blob in einer SQL DB speichert.

MfG
Björn

22.06.2010 - 09:23 Uhr

Hi,

zum Name
ich hab vergessen den raus zunehmen. Kannst du für dich als Info lassen, wird aber nicht benötigt.

zum Type und zur Kategorie_ID

der Type ist überflüssig. War nur für dich zum verständniss gedacht.

Kategorie ist mir eigentlich bisher nicht klar was drinne steht.
Ich hab ja einfach mal etwas weiter oben ein Beispiel gemacht.
Damit macht es sinn die ID mitzuführen. Leider weiß ich immer noch nicht wofür die Kategorie ist.

Zum Node_Id

Wir haben ID, Parent_ID und Node_ID

Beispiel:

In der Bern wird ein Auto gebaut.
Das Auto hat eine Parent_ID = ProduktGruppe(Metall) mit dem Node_ID = Stadt(Bern)

So kannst du Recursiv laufen und bekommst dann
Bern -> Schweiz -> Europa
über die Node_ID und
Auto -> Metall -> Inustry -> Europa
über die Parent_ID.

Zur Stammdaten_ID
die wird immer NOT NULL sein. Da rüber Referenzierst du Bern, Schweiz, etc.

Zu deiner Tabelle:

Bei Ort in Bern würde in Parent_ID = 2 sein und Node leer.
Die Node_ID wird nur gebraucht wenn du eineQuerverweis machen würdest. Siehe Oben.

22.06.2010 - 09:06 Uhr

Argh,
Adminrecht?
Das geht sicher auch anders.

22.06.2010 - 08:29 Uhr

Hi,

@Diräkt:

Sei mir nicht böse, aber das ist deine Arbeit das ganze in echtes T-SQL umzusetzen.
Wir haben versucht dir zu helfen bei deinem Konzept.
Dies nun um zusetzen ist dein Part.

Hier findest die Hilfe zum T-SQL vom MSSQL Server 2008.

Damit wirst du einfachst die Tabellen anlegen.

Wenn du probleme hast, kannst du deinen SQL-Code ja posten.
Dann schauen wir drüber.

MfG
Björn

22.06.2010 - 07:55 Uhr

Moin erst mal,

Also, so wie du das geschrieben hast, kannst du dann aber nicht unterscheiden, ob Weizen in Wien oder Berlin gelagert wird, weil du die Daten an der obersten Adresse verknüpfst, und daher nur sagen kannst, dass er in Europa ist.
Du solltest das eher ganz unten machen, also Produkt mit Stadt verbinden, dann hast du eine Gute und Eindeutige Unterscheidung.

Ok, das habe ich nicht bedacht. Dann fügen wir halt eine Node_ID ein.

Create Table ViperObject
...
Node_ID int FK(ViperObject.ID) null
...

So kann man dann dies Referenzieren.

Eine auf sich selbst referenzierende Tabelle is ja schön und gut, aber wenn du das so baust, musst du für jedes Element, welches eigentlich das selbe ist, Beispiel Weizen, für jeden parent den es hat noch einmal Weizen anlegen, was weitere Auswertungen unnötig verkompliziert oder auch langsam machen kann.

Daher bin ich kein Freund von Tabellen, die in sich selbst FK's haben.

Ok dafür machen wir halt eine z.B: Stammdaten Tabelle.

 CREATE Table Stammdaten
(
ID int PK,
Name varchar(x)
)

Jetzt erweitern wir die Tabelle ViperObject um die Stammdaten_ID

Create Table ViperObject
...
Stammdaten_ID int not null,
...

und schon haben wir 3 Tabellen: Stammdaten, ViperObject und Kategorie.

Was haben wir gemacht?
Wir haben einfach eine Tabelle die die beziehung untereinandere Regelt. (ViperObject).
Damit du Europa anzeigen kannst und das nur einmal speicherst haben wir
die Tabelle Stammdaten geschaffen. Dort Speicherst du alles z.B. Europa, Wien, Logisthik, etc.
Kategorie kannst du auch verwenden wie du wolltest.

Warum machen wir So ein kompliziertes FK Tabelle, die auf sich selbst verweist?
Ganz einfach. Im moment willst du immer nur 1 Parent und 2 Nods (Europa, Schweiz, Bern) , dann kommt vielleicht Stadtteil dazu und das kannst du hiermit sofort machen, mit einzelnen Tabellen geht das nicht.

MfG
Björn

21.06.2010 - 22:16 Uhr

Ah,

also nehmen wir mal an.

Eine Kategorie wäre:

bei Stadt -> Großstadt, Dorf, Metropole.
bei Land -> 3 Welt , 2 Welt , 1 Welt (Sorry viel nix besseres ein)
bei Kontinent -> Reich, Arm, Weltmacht
bei Bereich -> Produzierend, Dienstleistung, Staat
bei ProduktGruppe -> Luxus , Grundnahrungsmittel, Industriegüter, Rohstoffe
bei Produkt -> Gut, Schlecht, Mies

somit machst du zu jeder der 6 Tabellen eine 1:N beziehung. (FK)
Der FK sagt ja nur aus das die ID in Kategorie vorhanden sein muss.

Das zur Kategorie.


Sag doch mal mit wieviel Zeilen du denn in den 6 Tabellen Rechnest, weil wenn es nicht
über die 100.000 geht dann kann man die 6 Tabellen alle in eine machen 😃

Beispiel Tabelle in Pseudo-SQL:


CREATE TABLE ViperObject (
ID int PK,
Parent_ID int FK(ViperObject.ID),
Kategorie_ID int FK(Kategorie.ID),
Name NVARCHAR(x),
Type tinyint (1 bis 6 zum Unterscheiden)
)

Also das DTL-SQL selber ist nicht anders als wie über andere Tabellen.
Denk mal drüber nach ^^

MfG
Björn