Laden...
H
haarrrgh myCSharp.de - Member
Softwareentwickler Raum Köln Dabei seit 03.06.2008 208 Beiträge
Benutzerbeschreibung

Forenbeiträge von haarrrgh Ingesamt 208 Beiträge

26.04.2010 - 10:15 Uhr

Hallo,

danke für eure Antworten.

@MarsStein:
Daß sich 2 Clients stören weil ihre Dateien den gleichen Namen haben, das habe ich ausgeschlossen indem ich Tempordner mit Zufallsnamen erzeuge.
Meine Befürchtung ging eher in die Richtung daß man den Prozess nicht nochmal starten kann solange der letzte noch läuft, oder daß die sich sonst irgendwie stören wenn mehrere gleichzeitig laufen.

@Khalid:
OK, das habe ich vielleicht etwas übertrieben formuliert - es werden zwar 150 Benutzer sein, aber die werden nicht alle PDFTK benutzen.
Der Prozeß läuft auch nur Sekundenbruchteile, deshalb ist die Chance nicht allzugroß daß mehr als einer gleichzeitig läuft (wollte halt nur sichergehen falls es doch passiert).

Queue & asynchron bearbeiten ist deshalb IMO nicht unbedingt nötig (würde mich auch Zeit kosten die ich im Moment nicht habe, weil ich beides noch nie benutzt habe).

25.04.2010 - 19:52 Uhr

Ich arbeite gerade an einer Client-Server-Anwendung ähnlich Rainbirds Applikationsserver und möchte von dort das Kommandozeilentool PDFTK benutzen mit dem man PDFs manipulieren kann.

Der Client ruft also z.B. einen Service auf der eine Auftragsbestätigung mailen soll.
Der Server erzeugt eine PDF-Datei und verschickt sie per Mail.
Vor dem Verschicken würde ich die PDF-Datei jetzt gerne noch mit PDFTK manipulieren und z.B. unser Briefpapier einfügen.

Ich habe das Tutorial Prozess/Anwendung aus eigenem Programm starten gelesen und mich stark daran orientiert.
Im Moment rufe ich PDFTK folgendermaßen auf:

Process proc = new Process();
proc.StartInfo.FileName = Path; // Pfad zur pdftk.exe
proc.StartInfo.Arguments = args;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

proc.Start();
proc.WaitForExit();

proc.Close();

Prinzipiell funktioniert das auch erstmal - ich bin mir nur nicht ganz sicher wie sich das hinterher verhalten wird, wenn 150 Benutzer gleichzeitig auf dem Server arbeiten, in dem Tutorial ist auch nichts in der Richtung erwähnt.

Was passiert wenn 2 Clients das gleichzeitig versuchen?
Muß ich in den Aufruf noch irgendetwas einbauen das dafür sorgt daß der zweite Client wartet bis der Aufruf des ersten fertig ist, oder passiert das automatisch?

22.04.2010 - 21:18 Uhr

Sowas gibt es im SQL Server auch, nennt sich SQL Server Agent.

22.04.2010 - 20:06 Uhr

Hallo,

das ist ja im Prinzip genau die gleiche Frage wie hier:
Tabelle von DB1 in Tabelle von DB2 übertragen (unterschiedliche Rechner/SQL Instanzen)

Hilft Dir das weiter?

22.04.2010 - 18:19 Uhr

ich habe schon mehrere Schnittstellen für Fax erstellt, z.B. für Faxware, David, Superfax.

Das waren immer Lösungen für Netzwerke. Im Prinzip gibt man sein Zeug auf einen Windowsdrucker aus, und übergibt Parameter mit führenden Zeichen (@@@) oder mit spezieller Schriftart.

Hallo Bernd,

ich klinke mich mal hier ein weil ich gerade genau das versuche und nicht weiterkomme.

Ich habe hier Tobit Faxware und versuche Faxe zu versenden indem ich die Steuerzeichen @@NUMMER +4912345@@ usw. in Textfelder in die Berichte schreibe.
In unserer alten Access-Anwendung haben wir das auch schon seit Jahren problemlos genau so im Einsatz, aber wenn ich Berichte aus .net drucke erkennt Faxware die Steuerzeichen nicht.
Faxware fragt dann nach einer Faxnummer und die Steuerzeichen werden mitgefaxt (normalerweise entfernt Faxware sie ja, wenn es sie erkannt hat).

Ich habe das jetzt sowohl mit Microsoft Reports als auch mit Stimulsoft Reports (kommerziell) versucht, und bei beiden das gleiche Problem.
Es scheint also noch nicht mal an einem speziellen Produkt zu liegen.

Ich habe in irgendeinem Forum auch schon gelesen daß es evtl. an der verwendeten Schriftart liegen könnte. Ich habe auch schonmal ein paar andere ausprobiert (auch die, mit der es in Access seit Jahren klappt), aber leider ohne Erfolg.

Gibt es noch irgendwelche Tricks die ich nicht kenne, oder wie genau hast Du Faxware dazu gebracht die Steuerzeichen zu erkennen?

Vielen Dank!

22.04.2010 - 10:20 Uhr

Der Bindestrich im Namen Deines Servers ist ein reserviertes Zeichen, deshalb mußt Du den ganzen Servernamen schonmal in eckige Klammern [ ] setzen.

Aber bei Instanzen bin ich mir nicht so sicher, habe hier keine im Einsatz.
Ich vermute daß da auch einfach die eckigen Klammern reichen, aber ich kann es hier nicht ausprobieren.

22.04.2010 - 09:37 Uhr

Um herauszufinden welche Version des SQL-Servers Du hast, kannst Du einfach mal folgenden SQL-Befehl auf dem Server absetzen:

select @@version

Du bekommst einen Datensatz mit einer Spalte zurück, der je nach installierter SQL Server-Version ungefähr so aussieht:

Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

21.04.2010 - 16:50 Uhr

Wie Du prinzipiell Spalten von einer Tabelle in die andere überträgst, weißt Du wahrscheinlich:

INSERT INTO Tabelle2 (Spalte2) SELECT Spalte1 FROM Tabelle1

Wenn die Tabellen in verschiedenen Datenbanken liegen braucht man noch DB-Name und Schema:

INSERT INTO DB2.dbo.Tabelle2 (Spalte2) SELECT Spalte1 FROM DB1.dbo.Tabelle1

...und wenn die Datenbanken auch noch auf verschiedenen Servern liegen, dann braucht man auch noch den Servernamen:

INSERT INTO Server2.DB2.dbo.Tabelle2 (Spalte2) SELECT Spalte1 FROM Server1.DB1.dbo.Tabelle1

Damit das serverübergreifend funktioniert, mußt Du aber auf dem einen Server den anderen als **Verbindungsserver **definieren (per SQL oder im Management Studio).

Wenn Du die Abfrage direkt auf der einen DB ausführst, dann kannst Du natürlich für die das "Rechnername.DbName.dbo." weglassen.

14.04.2010 - 11:54 Uhr

Ich Handhabe diese Problematik genauso wie sth_Weird und Schlopp. Womit wir schon zu dritt wären 😄

--> Zu viert! Ich mache es auch so.
Das macht das Ganze einfach wesentlich übersichtlicher als viele verschachtelte Ifs.

07.04.2010 - 13:17 Uhr

Hast Du das andere Thema gesehen? Das ist erst von gestern oder vorgestern.

24.03.2010 - 21:47 Uhr

...deshalb habe ich ja geschrieben: "Ungefähr so" 😁

16.03.2010 - 08:55 Uhr

Ich würde einen Join nehmen.

Du kannst die gleiche Tabelle mehrmals joinen, das ist kein Problem.
Du mußt nur verschiedene Aliase benutzen.
Ungefähr so:


select *
from auftraege a
inner join mitarbeiter s on a.senderid = s.mitarbeiterid
inner join mitarbeiter e on a.empfaengerid = s.mitarbeiterid

16.03.2010 - 02:21 Uhr

Ich verstehe Deine SQL-Abfrage nicht...was genau willst Du mit den beiden CONVERT(...) machen?

Mitladen? Dann müssen sie vor "FROM dbo.V_PICKUPERROR6" und mit einem Komma getrennt werden.

Danach filtern? Dann fehlt da mindestens noch ein WHERE.

14.03.2010 - 11:42 Uhr

Ja, Du mußt sie registrieren, und Regasm ist eigentlich schon das richtige Mittel.
Die Frage ist nur ob Du es mit den richtigen Parametern aufgerufen hast.

Du mußt dll UND tlb angeben, und wenn die Assemblies nicht im GAC liegen sollen brauchst Du auch noch den Parameter /codebase.
Vom Prinzip her so:

regasm.exe test.dll /tlb test.tlb /codebase

(und natürlich müssen auch die Pfade zu allen 3 Dateien stimmen)

10.03.2010 - 23:43 Uhr

Das ist keine Projektart.
Wenn Du ein neues Element in ein Projekt einfügst, dann gibt es da auch "Bericht" zur Auswahl (da wo man auch zwischen "Klasse", "XML-Datei" usw. wählen kann).

10.03.2010 - 22:08 Uhr

Die Logitech UltraX hat bei mir schon in drei (!) Exemplaren nach ein paar Monaten den Geist aufgegeben.

Komisch, kann ich nicht nachvollziehen.
Ich habe im Büro schon seit längerem eine UltraX (haben wir fast alle), müßten jetzt schon so 3 Jahre sein - und es ist immer noch das erste Exemplar.

Weil ich mit der sehr zufrieden war und sie für mich genau die Kriterien erfüllt die Dir auch wichtig sind:

Kurzum - welche Tastatur würdet Ihr für Office- und Entwicklertätigkeiten empfehlen, wenn man eine Markentastatur ohne Klick haben will, die elegant und designed aussieht, auf unnötigen Schnickschnack verzichtet und ansonsten einfach sehr gut verarbeitet ist und funktioniert?

...habe ich mir auch eine für meinen Privat-PC gekauft.
Auch die habe ich jetzt seit über 2 Jahren, und auch immer noch das erste Exemplar.

04.03.2010 - 13:16 Uhr

Stimmt, ich denke nie daran das dazuzuschreiben, weil wir hier nur SQL Server 2005 haben.

Filestream vereint das Beste aus beiden Welten:

Auf der einen Seite wird die Datenbank nicht unnötig aufgebläht, weil die Dateien nicht als Blobs in der Datenbank gespeichert sind, sondern als Dateien im Dateisystem.

Auf der anderen Seite sind die Dateien trotzdem Teil der Datenbank, also bleiben die Vorteile die ich genannt hatte trotzdem bestehen (keine Inkonsistenzen, werden mitgesichert usw.)

03.03.2010 - 23:14 Uhr

Dann würde ich sie in der DB speichern.
Wenn der Rechner auf dem der SQL Server installiert ist nicht nur 256 MB Ram hat, dann sollte das kein Problem sein 😁

02.03.2010 - 11:45 Uhr

Ich kenne mich mit SSIS überhaupt nicht aus, aber auf den ersten Blick...wenn man ein SSIS-Paket anlegt, wird dann tatsächlich auch automatisch ein Wartungsplan angelegt der dieses Paket ausführt?

Wenn nicht, dann hast Du die Pläne für die anderen beiden Pakete wahrscheinlich manuell angelegt, und für dieses halt keinen.

02.03.2010 - 11:07 Uhr

Ich weiß nur nicht ob das so gut für wirklich große Datenmengen geeignet ist und du wirst nicht auf den Daten suchen können außer du hast extra spalten welche die Daten beschreiben wie eben der Dateiname.

Wir benutzen auch SQL Server 2005-Tabellen um PDFs und Grafiken als Blob zu speichern, darüber hatte ich hier schonmal was geschrieben.

Prinzipiell hat der SQL Server mit diesen Größenordnungen keine Probleme (der verlinkte Beitrag ist ja schon etwas älter...die Tabelle ist inzwischen jenseits der 500 TB und enthält mehrere Mio. Dateien).

In diesem Fall hier ist der "Server" natürlich kein richtiger Server sondern "nur" ein Clientrechner, der würde mit den Größenordnungen die ich hier habe schon Probleme haben...ich glaube aber nicht daß sich das Projekt von jogisarge auch nur ansatzweise in der Größenordnung bewegt, sonst würde nicht ein Client als Server "mißbraucht" werden.

Deshalb würde ich die Dateien in der DB anlegen. Man muß sich nicht mit Netzwerkfreigaben rumschlagen, es gibt keine Inkonsistenzen (Datei von der Platte gelöscht aber zugehöriger Tabelleneintrag noch da, oder andersrum) und um Datensicherung muß man sich auch nicht kümmern weil die Dateien im Backup der DB enthalten sind.

Über welche Größenordnung reden wir denn hier, jogisarge?
(wieviele Dateien ca. und wie groß)

21.02.2010 - 23:02 Uhr

Mooooment...ich glaube, so richtig ist die Sache immer noch nicht klar.

Zuerst mal:
FZelle hatte es schon geschrieben, aber wenn man nicht selbst schon ein bißchen darüber weiß liest man es vielleicht nicht heraus:

In VS.NET ab der 2005 std. ist der ReportViewer eingebaut, das ist eine "abgespeckte"
rein local arbeitende Version der "MS Reporting Services" (du musst die daten selber beisteuern ).

--> Es gibt 2 Versionen der MS Reports.
Die Berichte sind vom Grundaufbau und -aussehen her gleich, der Unterschied liegt darin wo die Berichte abgelegt sind und was sie können.1.SQL Server Reporting Services (Dateiendung .rdl): liegen auf dem SQL Server und werden von diesem gerendert, d.h. es MUSS ein SQL-Server existieren. 1.lokale Reports (Dateiendung .rdlc): können Teil des Visual Studio-Projektes sein oder irgendwo auf dem Rechner liegen. Werden vom aufrufenden Programm mit Daten gefüllt, d.h. es ist egal wo die Daten herkommen und es muß keinen SQL-Server geben.

Das ist sehr grob das Wesentliche.
Mehr Infos zu den Unterschieden zwischen den beiden Versionen findest Du hier:
Reporting Services and ReportViewer Controls in Visual Studio 2010

Dann zu meinem letzten Beitrag:
Der bezog sich ausschließlich auf die lokalen Reports (Option 2), und das was ich da mit Standard und Express geschrieben habe hat nichts mit dem SQL Server zu tun!
Es ging nur um die Version von Visual Studio, die Du zum Entwickeln benutzt. Also ob Du die kostenlosen Express-Versionen von Visual Studio benutzt oder eine der "richtigen" für die man Geld bezahlen muß (Standard, Professional), egal welche.
Davon abhängig ist die Unterstützung Deiner Entwicklungsumgebung für die lokalen Reports.
Auf der Seite des Kunden ist das nicht relevant, auch nicht welche Version des SQL-Servers er hat.

Wenn Du Dich dagegen für Option 1 (MS Reporting Services) entscheidest, dann muß der Kunde auf jeden Fall einen SQL Server haben, denn dieser stellt die Reports bereit und rendert sie.
Aber es ist völlig egal welche Edition er hat, denn auch die Express Edition des SQL Servers unterstützt die Reporting Services.

Achtung:
Es gibt mehrere Versionen der SQL Server Express Edition!
Liste mit Unterschieden ist hier, für Reporting Services brauchst Du die Version ganz rechts "with Advanced Services".

Ich hoffe, die Unterschiede sind jetzt klarer?

21.02.2010 - 20:59 Uhr

Das heißt, mir bleibt im Visual Studio 2008 nur die Möglichkeit über den MS Report Viewer zu gehen, welcher am aussterben ist. Hm, na gut, da muss ich mir irgendwie anders behelfen!

Nein, da hast Du was falsch verstanden. FZelle hat gesagt, daß Crystal Reports ab der 2010er Version nicht mehr in Visual Studio enthalten sein wird.
Wenn Du also nur mit VS-Bordmitteln arbeiten willst, sind MS Reports + Reportviewer der "Standardweg" - allerdings nicht mit den Express-Editionen, sondern erst ab der Standard Edition.

Wobei mir aber gerade noch etwas anderes auffällt: auf der von FZelle verlinkten Seite http://www.gotreportviewer.com gibt es ganz unten einen Link:

This free add-in adds Report Designer and ReportViewer control to the free Visual Web Developer Express.

Ich habe es jetzt nicht ausprobiert, aber ich vermute mal daß man dann mit VWD Express eine Assembly mit einem Report erstellen, diese Assembly in ein Visual C# Express-Projekt einbinden und den Report drucken kann.
Das ReportViewer-Control wird wahrscheinlich nur in Webanwendungen funktionieren, aber den Report an sich kriegt man bestimmt schon irgendwie gedruckt. Aber wie gesagt: das ist nur eine unverifizierte Vermutung von mir.

19.02.2010 - 13:21 Uhr

Naja, wenn Du String.Split() machst, dann kriegst Du ein Array mit ALLEN nachfolgenden Wörtern.
Wenn Du nur das nächste brauchst, dann such doch einfach nochmal mit IndexOf (dieses Mal nach dem nächsten Leerzeichen).

(mit Regex geht das wahrscheinlich alles mit viel weniger Code, aber ich verstehe kein Regex...)

19.02.2010 - 09:56 Uhr

Hallo herbivore,

danke für Deine Antwort, aber das ist aus dem MSDN-Artikel von DataGridView.SortOrder. Den hatte ich gestern auch schon gelesen.

Genau dieser Absatz den Du da zitiert hast, der ist mir gestern auch schon ins Auge gefallen, also habe ich den SortMode meiner Sortierspalte bestimmt:


var sortMode = this.UserGrid.Columns[e.ColumnIndex].SortMode;
// bzw.
var sortMode2 = this.UserGrid.SortedColumn.SortMode;

Egal ob ich über den ColumnIndex der angeklickten Spalte gehe oder (wie von MSDN vorgeschlagen) über die SortedColumn-Eigenschaft, der SortMode ist immer "Automatic".

Demnach gilt für mich folgender Absatz aus Deinem Zitat:

Mit dieser Eigenschaft wird bestimmt, welches Sortiersymbol anzeigt wird, wenn die von der SortedColumn-Eigenschaft angezeigte Spalte den SortMode-Eigenschaftenwert Automatic aufweist.

--> Das Codebeispiel im MSDN-Artikel betrifft mich nicht, weil es sich auf SortMode = "Programmatic" bezieht.

--> Da SortMode = "Automatic" ist müßte ich nach meinem Verständnis wirklich nur die SortOrder des DGV abfragen, aber der ist ja immer "Ascending".

Da Du mir nur kommentarlos mit einem Zitat aus der MSDN geantwortet hast, möchtest Du mir damit wahrscheinlich sagen daß ich irgendwas falsch mache (und die Lösung in diesem MSDN-Artikel finde).

Wenn dem so ist, dann verstehe ich nicht WAS ich falsch mache und wäre dankbar für mehr Info!

19.02.2010 - 00:10 Uhr

Ich verstehe auch nicht warum es mit IndexOf nicht geklappt hat:


string Text = "blabladfs WORT bla bli blu blub";
string Suchwort = "WORT";

int i = Text.IndexOf(Suchwort);

string Danach = Text.Substring(i + Suchwort.Length);

...oder halt noch ein .Trim() dahinter wenn Du das Leerzeichen hinter "WORT" nicht im String "Danach" haben willst.

18.02.2010 - 23:30 Uhr

Es geht auch ohne Schleife:


// Original-String
string Original = "aabbccddeeAABBCCDDEE";

// alle Buchstaben zu Kleinbuchstaben machen um "a" UND "A" zu erwischen
Original = Original.ToLower();

// a/e rauslöschen
string OhneA = Original.Replace("a", "");
string OhneE = Original.Replace("e", "");

// Anzahl der a/e = Differenz der beiden Stringlängen
int AnzahlA = Original.Length - OhneA.Length;
int AnzahlE = Original.Length - OhneE.Length;

18.02.2010 - 23:16 Uhr

Hallo zerberos,

ist das eine einmalige Aktion oder soll das als Job regelmäßig laufen?

Wenn es regelmäßig laufen soll, dann solltest Du es natürlich "richtig" machen.

Aber wenn es nur eine einmalige Aktion sein soll und nicht besonders elegant sein muß (hauptsache, die Daten kommen 1x von A nach B), dann wäre vielleicht auch MS Access eine Möglichkeit.

In Access kann man Tabellen aus verschiedenen Datenquellen verknüpfen (Access, SQL-Server, ODBC allgemein, sogar Excel!) und Insert-Abfragen von der einen in die andere Tabelle in einem Assistenten zusammenklicken.
Das mache ich z.B. immer, wenn ich irgendwas als Excel-Datei bekomme und einmalig in eine SQL-Server-Tabelle importieren muß.

Das ist zwar performancetechnisch nicht das Gelbe vom Ei, aber für eine einmalige Aktion interessiert mich das nicht wirklich, wenn ich dafür die Abfrage in 2 Minuten zusammengeklickt habe - laufenlassen kann ich sie ja nach Feierabend, wenn keiner mehr da ist.

18.02.2010 - 17:56 Uhr

Hallo,

ich habe eine Methode die eine Abfrage macht und eine DataTable zurückgibt, mit Paging.
Also: ich übergebe der Methode Seitennummer und Anzahl DS pro Seite, und bekomme eine DataTable zurück die wirklich nur die Datensätze für diese eine Seite enthält.

Diese DataTable zeige ich in einem DataGridView an.
Wenn ich zum Sortieren auf einen der Spaltenköpfe klicke, dann verhält sich das DGV standardmäßig so daß es die vorhandenen Datensätze sortiert.

Wenn ich also z.B. eine Liste von Personen nach Nachnamen sortiert lade, dann sehe ich in der DataTable die ersten 10 Personen, deren Nachname mit A anfängt.
Wenn ich jetzt per Klick auf die Vornamen-Spalte nach Vorname sortiere, dann sortiert das DGV einfach nur die gleichen 10 Personen nach ihren Vornamen.

--> Ich möchte aber natürlich, daß eine neue Abfrage sortiert nach Vornamen gemacht wird, und davon möchte ich die ersten 10 Personen haben.

Also muß ich meiner Methode die Informationen übergeben, auf welche Spalte geklickt wurde und ob auf- oder absteigend sortiert werden soll.

Um das herauszufinden, dazu benutze ich den Event "ColumnHeaderMouseClick" des DGV:

private void UserGrid_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            // Spalte ermitteln
            string orderBy = this.UserGrid.Columns[e.ColumnIndex].DataPropertyName;

            // herausfinden ob absteigend sortiert wird
            bool orderDesc = this.UserGrid.SortOrder == SortOrder.Descending;
		
        }

Die erste Zeile (Spalte ermitteln auf die geklickt wurde) funktioniert.

Aber die zweite Zeile (ermitteln ob auf- oder absteigend sortiert wird), die funktioniert nicht:

this.UserGrid.SortOrder ist immer gleich SortOrder.Ascending, egal wie oft ich auf die Spalte klicke.
Absteigend sortieren kennt das DGV anscheinend nicht mehr.

Gleichzeitig ist mir aufgefallen, daß dieser kleine Pfeil, der die Sortierrichtung anzeigt (s. angehängte Grafik), nicht mehr erscheint seit ich den Event benutze.
Wenn ich den Eventhandler wieder lösche, dann erscheint der Pfeil wieder.

Kann es sein daß die Sortierrichtung generell nicht mehr funktioniert, sobald man den Event irgendwie programmatisch abfängt?
Oder mache ich was anderes falsch?

Danke!

18.02.2010 - 09:38 Uhr

Schau einfach mal mit Procmon einen Build an, dann wird dir einiges klarer
warum einiges tewas dauert.

Danke für den Tip, Procmon kannte ich bisher noch nicht. Habe ihn mir gerade heruntergeladen und ausprobiert. Ist wirklich interessant wo beim Build so alles nach Dateien gesucht wird:

17.02.2010 - 23:41 Uhr

Dadurch ging die Rebuild Zeit bei ca 90 Projekten ( ca 1.200.00 LOC ) in der Solution auf 1:40 runter,
und das auf einem Notebook mit einem Intel 7200 Code2Duo mit nur 4GB und
einer normalen 320 WD Platte.
Wenn nicht alles zu Compilieren ist, geht das auch schon mal direkt nach dem Knopfdruck los.

Wie war die Rebuild-Zeit denn vorher, bevor Du das alles gemacht hast?
Wir haben im Moment (noch) kein Projekt in der Größe, aber wir fangen gerade ein neues an das in Zukunft sicher bis zu dieser Größenordnung wachsen wird.
Deshalb würde mich der Vergleich vorher - nachher sehr interessieren, um mal zu wissen wieviel Zeitersparnis durch solche Optimierungen noch drin ist.

Punkt 4 werde ich morgen gleich mal ausprobieren, da wir eh schon MSBuild zum Kompilieren nutzen.

  1. Alle externen Libs die man sonst so eingebunden hat (z.b. DevExpress/Infragistigs...) in den Pfad:
    %ProgramDir%\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\
    Kopieren.
    Das ist der erste Pfad wo VS.NET die Dateien sucht.

Auch wenn sie direkt im Projekt liegen? Ich habe in meiner Solution einen Unterordner "Libs", da sind sie alle drin und ich binde sie direkt von da ein.
Sucht VS dann TROTZDEM zuerst noch in ...\Public Assemblies?

17.02.2010 - 22:50 Uhr

Meine Erfahrungen mit Vobis und Escom liegen Jahre zurück, aber als besonders berauschend habe ich dasn icht in Erinnerung
Die sagen mit persönlich jetzt nichts.

Die waren in der Zeit wo ich mir meinen ersten PC gekauft habe sehr präsent (1995), in der Tat stammte mein erster PC sogar von Vobis.
Danach habe ich aber auch schon lange nichts mehr von ihnen gehört. Jetzt wo ich das hier gelesen habe, habe ich mal gegoogelt und festgestellt daß es beide noch oder wieder gibt. Aber sie scheinen lange nicht mehr so groß/präsent zu sein wie früher.

12.02.2010 - 00:31 Uhr

Ohne genauere Informationen was er für eine Software entwickelt und wer seine Nutzer sind finde ich daran jetzt erstmal nichts Verwerfliches.

Wenn er Software an Endanwender verkauft und bei denen still und heimlich Wordvorlagen austauscht, dann gebe ich Dir natürlich Recht - das hört sich nicht ganz koscher an.

Wenn er aber wie ich in einer "Nicht-Software-Firma" arbeitet und nur Inhouse-Software entwickelt (also mit anderen Worten: seine Nutzer sind seine Kollegen), warum soll er dann nicht bei allen die Wordvorlage ändern?
Haben wir auch gemacht, firmenweiter Standard und so...

10.02.2010 - 09:20 Uhr

Ich habe eine Teillösung, nur für die Sache mit dem "(a-z; A-Z; 0-9;...)" fällt mir auf die Schnelle nichts ein:


declare @x int
declare @y int

set @x = 97 -- ASCII: a
set @y = 122 -- ASCII: z

select 
	char(round(rand() * (@y -@x) + @x,0)) +
	char(round(rand() * (@y -@x) + @x,0)) +
	char(round(rand() * (@y -@x) + @x,0))
	-- usw.

Ich erzeuge mit Hilfe der Rand()-Funktion Zufallszahlen.
Eigentlich erzeugt sie Kommazahlen zwischen 0 und 1, und durch

round(rand() * (@y -@x) + @x,0)

...sorge ich dafür daß die Zahlen ohne NKS sind und zwischen 97 und 122 liegen.

97 und 122 sind die ASCII-Codes für "a" und "z", und mit Char() wandele ich die Zahl in das entsprechende ASCII-Zeichen um.

Das ganze muß man dann nur noch 8x hintereinander schreiben (habe es in dem Beispiel jetzt nur 3x gemacht).

Einziger Nachteil ist, daß man mit der Methode nur Zeichenketten erzeugen kann die in einem zusammenhängenden ASCII-Bereich liegen.
0-9, a-z und A-Z liegen in keinem zusammenhängenden Bereich, deshalb kann man mit meiner Methode keine Strings erzeugen die Zeichen aus mehr als einem dieser Bereiche enthalten.

Ein Matheguru könnte das "rand() * (@y -@x) + @x" aber bestimmt so umformen daß Zahlen zwischen (48 und 57) ODER (65 und 90) ODER (97 und 122) rauskommen...

09.02.2010 - 23:03 Uhr

Wir haben mit einer winzigen Nußschale den Mond erreicht.

08.02.2010 - 23:16 Uhr

Also, es geht Dir weniger darum z.B. im Zuge einer Programmänderung notwendige Datenbankupdates irgendwie zu automatisieren (danach sieht mir Migrator.NET aus), sondern Du willst einfach nur protokollieren, was wann geändert wurde, also praktisch eine Historie haben. Richtig?

Das gleiche Problem hatte ich auch: unsere Datenbank ist jetzt 8 Jahre alt und enthält hunderte SPs, Views und Tabellen. Jeder hat die Dinger direkt im Management Studio geändert, Wiederherstellung älterer Versionen war nicht möglich und man konnte auch nicht sehen was verändert wurde.

Ich habe mir schließlich mit Hilfe zweier Open Source-Tools selber etwas gebastelt:

ScriptDB:

ScriptDb is a simple console app written in C# that uses SQL Management Objects (SMO) to script all the objects in a database. It will work against any SQL Server 2000 or 2005 database. It creates a directory tree structure with a similar hierarchy to that in Object Explorer in SSMS, with a separate file for each object.

...und Subversion.

Perfekt ist es nicht, aber mir genügt es.

Jede Nacht wird per Windows-Taskplaner eine Batchdatei gestartet, die per ScriptDB die komplette DB-Struktur in einzelne Textfiles exportiert (eins pro Objekt), und diese dann in Subversion eincheckt.

Ungefähr so:


del c:\scripts\*.sql /s /q

scriptdb.exe -con:server=Servername;database=DbName;trusted_connection=yes -outDir:c:\scripts\ -ScriptAsCreate

svn add --force c:\scripts\

svn commit c:\scripts\ -m "Auto-Checkin"

Aber wie gesagt, ganz perfekt ist diese Lösung nicht.
Sie hat folgende Nachteile (mit denen ich aber leben kann):

  1. da ich praktisch nur 1x täglich einen Snapshot mache, kriege ich so nicht JEDE Änderung an der Datenbank mit.
    Wenn ein Objekt in den letzten 24h mehr als 1x verändert worden ist, dann sehe ich in der Historie alle Änderungen als eine einzige zusammengefaßt.

  2. ich sehe auch nicht wer was verändert hat, der Job protokolliert alle Einträge mit dem gleichen Usernamen.

  3. mit Subversion kann man nicht so ohne weiteres Dateien aus der Versionsverwaltung löschen, die verschwunden sind.
    Wenn neue Objekte erstellt wurden (also nach einem Export Dateien da sind, die es vorher nicht gab), dann kann man Subversion mit "svn add --force" alle neuen Dateien hinzufügen lassen.
    Umgekehrt geht das serienmäßig nicht, es scheint dazu zwar einen Workaround zu geben, aber das war mir damals zu kompliziert (und ich hatte keine Zeit um mich tiefschürfender damit zu beschäftigen).

Da wir eine relativ überschaubare Truppe (3 Mann) sind, sind Punkt 1 und 2 nicht so schlimm.
Bzw. Punkt 1 ginge auch gar nicht anders...ich hätte den Job gerne mehrmals täglich laufen lassen, aber der Export läuft bei uns ca. 40 min. (insgesamt gut 1500 DB-Objekte die da gescriptet werden)...das kann ich tagsüber nicht machen.

Problem 3 ist Subversion-spezifisch und ließe sich durch Änderung der Versionsverwaltung abstellen. Tatsächlich fangen wir sowieso gerade damit an, Mercurial zu benutzen, deshalb hatte ich vor die Versionierung des SQL-Servers auch auf Mercurial umzustellen. Mercurial hat nämlich auch einen Befehl "hg addremove", der dafür sorgt daß neue Dateien hinzugefügt UND gelöschte entfernt werden.

18.01.2010 - 15:41 Uhr

Mit anderen Worten, Du benutzt jetzt quasi Deinen "eigenen" OR-Mapper, nur daß er halt eine Anpassung von Version X vom Open Source-Mapper Y ist?

Auf welchem Mapper hast Du denn Deinen aufgebaut? Würde mich mal interessieren.

18.01.2010 - 09:01 Uhr

Hallo Samuel,

meinst Du wirklich das Anlegen von Datenbanken, oder meinst Du den Zugriff auf eine existierende Datenbank (also Daten lesen & schreiben)?

Wenn es um den Zugriff geht: dann ist (wie Florian schon gesagt hat) O/R-Mapper das richtige Suchwort.
Die bekanntesten O/R-Mapper dürften NHibernate und das Entity Framework sein.

15.01.2010 - 11:52 Uhr

Ich bin mir ehrlich gesagt nicht sicher ob es das ist.
Wenn ich es bei mir mit "\server\e\test.bak" versuche kriege ich eine andere Fehlernummer als die, die Yheeky oben gepostet hat.

Kann natürlich auch wieder daran liegen daß ich Adminrechte habe und er nicht...

15.01.2010 - 10:31 Uhr
Cannot open backup device '\\168.xxx.xxx.123\e\Database.bak'.   

Sag mal...ist "e" wirklich ein freigegebener Ordner auf dem Zielrechner oder möchtest Du vielleicht auf das **Laufwerk **E: schreiben?

Wenn es Laufwerk E: sein soll und kein Ordner namens "e" freigegeben ist, dann muß es natürlich "\168.xxx.xxx.123\e$\Database.bak" heißen!

14.01.2010 - 16:48 Uhr

An sich kann der SQL Server auch auf Netzlaufwerke sichern.
Daß das Management Studio nur Deine lokalen Platten anzeigt ist eine Beschränkung des Management Studios.

Wenn Du das Backup per T-SQL machst, dann kannst Du auch Netzlaufwerke angeben:

backup database TestDB to disk = '\\servername\freigabe\test.bak'
12.01.2010 - 22:16 Uhr

Es geht auch ohne den GAC - dazu brauchst Du den Parameter /codebase.
Vom Prinzip her also so:

regasm.exe test.dll /tlb test.tlb /codebase

Das mit den Pfaden kannst Du auch größtenteils vermeiden.
Ich habe es so gemacht daß die Batchdatei im gleichen Ordner liegt wie meine COM-DLL, also brauche ich vor .dll und .tlb schonmal keinen Pfad.

Und für den Pfad zur regasm.exe bin ich bis jetzt den "Weg des geringsten Widerstandes" gegangen 🙂

path="%WINDIR%\Microsoft.NET\Framework\v2.0.50727\"

Bis jetzt bin ich davon ausgegangen daß das Framework immer unter dem gleichen Pfad installiert ist - hat bis jetzt immer funktioniert.
Disclaimer: ich setze COM-Interop aber auch noch nicht produktiv ein, bin noch in der Testphase. Vielleicht muß ich mir für den Echtbetrieb auch noch was anderes ausdenken wenn meine bisherige Methode noch irgendwelche versteckten Nachteile haben sollte...

12.01.2010 - 14:50 Uhr

Fossil hört sich aber auch interessant an :
>

Ja, davon hatte ich auch schon gelesen. Allerdings muß ich sagen daß ich vorher noch nie davon gehört hatte...allzuweit verbreitet scheint es also nicht zu sein.
Das ist dann auch wieder so eine Sache...was nützt es wenn man Probleme damit hat und niemanden findet, der sich damit auskennt und einem helfen kann.

Außerdem scheint es dafür keine GUI zu geben, so wie ich das verstehe.
Es muß ja nicht VS-Integration sein, aber zumindest etwas TortoiseFossil-artiges muß IMO schon sein...ich will nicht alles über die Kommandozeile machen.

30.12.2009 - 13:29 Uhr

Doch, Du hast das klar formuliert. Aber ICH habe den Satz mit "technisch besser" schlecht formuliert...eigentlich meinte ich was anderes.

Ich wollte damit eigentlich folgendes sagen:

Ich sehe halt nur wieviel in den einschlägigen Blogs, Foren, bei Stackoverflow usw. über Git und wieviel über Mercurial geschrieben wird. Und die Git-Leute schreien eindeutig lauter als die Mercurial-Leute 😄

Da ich beide Systeme nur relativ kurz ausprobiert habe kann ich natürlich keinerlei Aussage zur technischen Überlegenheit machen.
Es entsteht bei mir halt nur der Eindruck daß Git mehr genutzt zu werden scheint (wie gesagt...die schreien lauter...).
Und ich frage mich halt ob Git technisch überlegen ist und falls ja, ob das der Grund ist daß mehr Leute es nutzen/darüber schreiben als über Mercurial...oder ob beide gleich gut sind (oder Git sogar schlechter ist) und Git nur mehr gehypt wird.

Ich tendiere fast eher zu der Hype-Theorie.
Wie gesagt, vom ersten Eindruck her mag ich Mercurial lieber. Hauptgrund hast Du schon genannt:

Git ist bei weitem nicht so schön zu Bedienen.

Ich möchte mich halt nur vergewissern daß ich nicht nach meinem Bauchgefühl entscheide und dann hinterher merke daß ich aufs falsche Pferd gesetzt habe weil es z.B. irgendwelche Unterschiede gibt die mir beim Testen nicht aufgefallen sind und die dann erst später ans Licht kommen, wenn es "zu spät" ist.

Mir ist bis jetzt ansonsten nämlich nicht groß etwas aufgefallen.
Die von Dir angesprochene Plattformunabhängigkeit brauche ich noch nicht mal (Windows reicht), und den Punkt mit der Geschwindigkeit den thomas.at oben in der allerersten Antwort angesprochen hat kann ich so auch nicht nachvollziehen...habe mir gestern abend das gesamte Repository von Python runtergeladen (ca. 100 MB, 43.000 Commits), damit etwas rumgespielt und selbst auf meinem relativ lahmen Laptop nicht den Eindruck gehabt daß Mercurial sonderlich langsamer ist als Git bei ähnlichen Größenordnungen.

29.12.2009 - 22:10 Uhr

Ich persönlich setze für alles Git ein. Es ist Subversion um Längen überlegen. Die Gründe hat der OP bereits genannt. Git wird von den genannten System im Linux-Umfeld sehr stark genutzt, weshalb dieses System wohl auch in Zukunft stark weiterentwickeln wird.

Mich würde interessieren, warum gerade Git und nicht z.B. Mercurial? Nur wegen dem was Du geschrieben hast, also weil die Chance daß es weiterentwickelt wird am größten ist? Oder hast Du noch andere Gründe?

Prinzipiell stimme ich Dir zu - und wenn ich zwei Systeme ansonsten gleich gut fände würde ich das als letztes Entscheidungskriterium nehmen.

In meinem Fall ist es aber so:
Einerseits gefällt mir Mercurial irgendwie besser - von der Bedienung her, vom Eindruck insgesamt...
Andererseits scheint Git ja weiter verbreitet zu sein, nach dem was man so liest
(oder die Git-Benutzer schreien einfach nur lauter 😁 )

Und jetzt frage ich mich halt ob das wirklich daran liegt daß Git technisch besser ist als Mercurial (und wenn ja, warum ich das nicht sehe und mir Mercurial sympathischer ist) oder ob das eher nur ein Hype um Git ist.

Gibt es für diese Systeme ein VS-Plugin?

Hm, keine Ahnung - damit habe ich mich bis jetzt noch überhaupt nicht beschäftigt.
Ich habe keine Lust mich mit Kommandozeilenbefehlen rumzuschlagen, aber Explorer-Integration in Form von Tortoise-Wasauchimmer reicht mir vollkommen (die habe ich auch getestet...die direkten Kommandozeilenbefehle nur mal kurz ausprobiert, will ich später ja eh nicht benutzen).

29.12.2009 - 02:08 Uhr

Verteilte System wie Git machen mehr Sinn, wenn die Entwickler auch verteilt sitzen oder?
Bei uns in der Firma sind wir 8 Entwickler die jeden Tag zusammen im selben Büro sitzen.
Wir teilen uns einen Server und können von daher auch auf ein und den selben Datenbestand (ein Repository) zugreifen.

Nö, damit hat es nicht unbedingt was zu tun. Wir sitzen auch alle in einem Büro (und wir sind noch nicht mal 8 Entwickler)

Mir geht es um was anders: bei Subversion gibt es halt nur das zentrale Repository. Wenn man einen Branch erstellen will macht man das auch auf dem zentralen Repository, d.h. das geht übers Netz und das Ding liegt direkt im zentralen Repository, auch wenn man vielleicht nur kurz etwas testen wollte.
(vermutlich könnte man es danach auch wieder rauslöschen, aber so wie ich das verstanden habe bleibt die Historie trotzdem im Repository und belegt Speicherplatz, obwohl ich die Sachen nie mehr brauchen werde oder sehen will. Da lasse ich mich aber auch gerne eines besseren belehren - wie gesagt, soviel Erfahrung habe ich mit Subversion auch nicht.)

Bei den verteilten Systemen kann man das ganze Repository klonen, dann hat man eine lokale Kopie davon auf dem Rechner. Zum einen kann man darauf lokal seine Commits machen (ok, könnte man bei einem SVN-Branch auch, aber hier ist es halt lokal und damit schneller), und zum anderen kann man das ganze Ding lokal wieder löschen wenn man es doch nicht braucht, ohne daß hinterher noch irgendwo eine Spur davon existiert.

Und das ist es, was mir so gut daran gefällt. Jetzt im Moment arbeite ich im Büro hauptsächlich (noch) mit MS Access, und da arbeite ich praktisch auch ohne Versionsverwaltung (bei Access ist das alles nicht so einfach...).
Es ist eine Inhouse-Software, bei der ich neue Features hinzufüge und Bugfixes mache.
Und ich arbeite die ganze Zeit so: wenn ich ein neues Projekt (=ein neues Feature in der bestehenden Software) anfange, dann mache ich mir eine Kopie von dem ganzen Ding, mache über Tage oder Wochen meine Änderungen darin und merge das Ganze am Ende von Hand wieder in die "Hauptversion" (in der in der Zeit auch Sachen verändert wurden, entweder durch andere Features oder durch Bugfixing).
Im Prinzip ist das ja Branching, nur halt zu Fuß.

Die ganze Inhouse-Software wird jetzt Schrittchen für Schrittchen zu .net migriert, und da wird sich ja am Grundprinzip des Ablaufs nichts ändern. Fakt ist, ich werde dauerhaft 2-3 neue Branches pro Woche erstellen deren Inhalt und Historie ich nie wieder brauchen werde sobald ich sie in den Trunk gemergt habe.

Und da gefällt mir halt zum einen das Prinzip besser daß nicht immer jeder kleine Wegwerf-Test direkt im zentralen Repository landet, und zum anderen finde ich das Zurückmergen in Subversion grundsätzlich umständlicher.
"Branch erstellen --> parallel Sachen im Trunk ändern die sich z.T. überschneiden --> Branch wieder zurück in den Trunk mergen" funktioniert in Git und Mercurial IMO viel besser als in Subversion (und Git finde ich stellenweise auch noch etwas holprig und unintuitiv, deshalb gefällt mir Mercurial insgesamt besser).

Und dazu kommt halt noch der Vorteil daß man den Klon auch auf den Laptop packen, ohne Verbindung zum zentralen Server damit arbeiten und seine Änderungen später wieder zurückmergen kann. Das ist für mich zwar nicht so wichtig wie das andere, aber ein nettes Zusatzargument für die verteilten Systeme.

29.12.2009 - 01:36 Uhr

Bei Mercurial ist uns aufgefallen, das das System leider immer langsamer wurde. Dies dürfte daran liegen, das HG alles im Filesystem anlegt. Dadurch dauert das Öffnen von VS oder des Explorers immer länger.

Hm. Ich habe das bis jetzt natürlich nur mit Spieldaten (Hello World...) ausprobiert und noch nicht mit "richtigen" Projekten. Du meinst aber, daß nicht nur z.B. das Klonen eines bestehenden Riesen-Repositorys langsamer ist (weil da halt alle Daten 1x kopiert werden), sondern wirklich jede einzelne Operation, wie z.B. auch Öffnen in Visual Studio?
Hm, da muß ich nochmal gucken. Vielleicht sollte ich mir mal eins der Open Source-Projekte nehmen die mit Mercurial arbeiten (Python z.B., die werden ein paar mehr Commits als 400 haben...), 1x das ganze Repository von denen nehmen und damit ein bißchen rumspielen...

28.12.2009 - 15:10 Uhr

Hallo,

in letzter Zeit liest man immer mehr über verteilte Systeme wie Bazaar, Mercurial und insbesondere Git.

Ich setze bis jetzt Subversion ein (aber auch erst seit ein paar Monaten, bin also auch kein wirklicher Experte darin).
Damit bin ich im großen und ganzen ganz zufrieden, aber zwei Dinge daran stören mich:*Branchen und Mergen finde ich etwas fitzelig (also: Branch mit neuem Feature erstellen und darin arbeiten, gleichzeitig Bugfixing und/oder kleinere Änderungen in der "laufenden" Version und das Ganze dann irgendwann zurückmergen) *Wenn ich mit meinem Laptop irgendwo unterwegs bin muß ich entweder mein zentrales Subversion-Repository manuell darauf kopieren (und manuell wieder zurückkopieren wenn ich wieder zuhause bin) oder ich kann unterwegs keine Commits machen

Das hat mich vor kurzem dazu gebracht mich mal mit Git und Konsorten zu beschäftigen, denn die behaupten ja alle von sich, gerade in diesen beiden Punkten komfortabler zu sein.

Ich habe in den letzten Tagen Git und Mercurial ausprobiert (das scheinen die beiden verbreitetsten zu sein, in dieser Reihenfolge) und ich werde wahrscheinlich zu Mercurial wechseln, das hat mir sehr gut gefallen.

Wie sieht es bei euch aus? Wenn man in der Forensuche nach Git, Mercurial usw. sucht bekommt man nicht besonders viele (Git, Bazaar) bzw. überhaupt keine Treffer (Mercurial).
Setzt ihr keins davon ein (wenn ja, warum nicht?) oder schreibt ihr nur nicht darüber? 🙂

23.11.2009 - 14:26 Uhr

Zu xcopy:
xcopy macht aber keine 100%ige Synchronisierung, d.h. wenn ich im Quellordner eine Datei lösche, dann löscht xcopy sie nicht im Zielordner.

Ich habe einen ähnlichen Anwendungsfall (regelmäßiges Backup von Festplatte auf USB-Platte), und ich benutze dafür Robocopy.
Ab Vista ist es sowieso bei Windows dabei, und mit dem /mir-Parameter synchronisiert es wirklich "richtig":

robocopy c:\daten\ g:\backup\ *.* /mir

Das startet zwar nicht automatisch wenn ich die USB-Platte einstecke, aber das brauche ich auch gar nicht.
Ich habe die obige Befehlszeile in einer Batchdatei die ich nach dem Einstecken der Platte von Hand starte. Für mich reicht das.

01.11.2009 - 12:44 Uhr

Kann ich nur bestätigen, ich habe auch schon ziemlich viel Kram über ebay verkauft und sehr gute Erfahrungen mit Hermes gemacht.

Bei DHL gibt es zwar ein Päckchen das 10 Cent weniger kostet als bei Hermes, aber das darf nur max. 2 kg schwer sein (darüber wird's direkt teurer).
Es gibt zwar auch Konstellationen wo man mit DHL billiger hinkommt als mit Hermes (große Abmessungen, wenig Gewicht) aber ich habe fast immer Hermes genommen weil meine Sachen nicht besonders groß waren, aber schwerer als 2 kg.
(hier sind mal die Tarife von Hermes - die günstigen Preise kriegt man wenn man das Paket selber zum Shop bringt und den Paketschein vorher online ausfüllt und ausdruckt)

Dazu kommt noch daß man bei Hermes schon bei dem kleinsten Päckchen Versandverfolgung hat und bei DHL nicht (neuerdings haben sie das angeblich schon, aber meiner Erfahrung nach hängt das von dem Postmitarbeiter ab der das Päckchen entgegennimmt...manchmal habe ich einen Kassenbon mit einer Trackingnummer dazubekommen und manchmal nicht).

Und - und das ist meiner Meinung nach der größte Vorteil von Hermes wenn man in einer ländlicheren Gegend wohnt - die Hermes-Paketshops sind meistens Kioske o.ä. die oft bis 22 oder 23 Uhr aufhaben, d.h. ich kann meine Pakete bis um die Zeit noch da abgeben. Die Post hat hier auf dem Land meistens schon zu wenn ich von der Arbeit nach Hause komme.

Und bei kleinen Paketen kommst Du auch noch billiger weg wenn sich der Käufer darauf einläßt:
Wenn Du den Paketschein selber druckst, das Paket zum Shop bringst und der Empfänger es selber in einem Shop seiner Wahl (den er vorher angeben muß) abholt, kostet es nur 3,65 (wenn man es über ebay ausfüllt sogar nur 3,55). Nennt sich Shop2Shop.

Mache ich am allerliebsten wenn ich mir etwas schicken lasse, denn wenn der Paketbote tagsüber kommt bin ich eh nicht zu Hause. Und im Paketshop kann ich das Paket während den gesamten Öffnungszeiten des Paketshops abholen ("meiner" hat bis 23 Uhr auf).

29.10.2009 - 00:41 Uhr

Zuerst habe ich es auch so verstanden, als hätte er nur ein Backup.

Aber ich vermute, er hat das inzwischen auf einem anderen Rechner wiederhergestellt, weil er nicht wußte wie er es in eine neue DB auf dem gleichen Rechner wiederherstellt.