Ja, ich würde eine Synchronisation verwenden.
Bei allen 3 Varianten benötigst du eine feste IP-Adresse oder zumindestens eine Namensauflösung für deine dynamische IP-Adresse. Du hast ja eine Fritz!Box, diese kann schon verschiedene Dienste ansprechen, die deine dynamische IP-Adresse in einen Namen umwandeln können (DynDNS ist einer dieser Dienste.).
Dein Client muss ja eine Verbindung zu dem Service aufbauen, egal ob das der Web-Service oder der VPN-Service oder der Datenbank-Service ist. Hier für benötigt der Client die IP-Adresse, die kann durch eine Konfiguration vorgegeben sein oder durch eine Dynamische Namensauflösung (DNS) ermittelt werden.
da du nicht genau dein Szenario erklärst, gehe ich davon aus dass du eine verteilte Anwendung erstellen musst, die in verschieden Standort der Firma laufen soll.
@Variante 1)
Auch hier benötigst du eine IP-Adressen Auflösung (siehe Variante 2) um eine VPN Verbindung aufzubauen. Stellt aber einen hohen administrativen Aufwand dar.
@Variante 3)
Hiervon würde ich dir aus Sicherheitsgründen abraten, hier muss mind. eine VPN Verbindung da sein über den der Datenaustausch läuft. (siehe Variante 1).
@Variante 2)
Das ist an sich die die flexibelste Lösung. Die Datensynchronisation kann dann über verschieden Techniken laufen. (SQL Server Mergereplikation with Websyncgronisation, Sync Framework, ...)
Auch hier benötigst du eine IP-Adressen Auflösung, die kann man über verschiedene Wege erreichen
- Dynamische Auflösungen via DNS (DynDNS) = kostenlos
- feste IP-Adresse = kostet bei den meisten ISP
Was hier die größte Herausforderung ist, ist die Sicherheit.
- Wie sichert man den Transportweg ab?
- Wie stellt man sicher das nur bestimmte Clients den Service aufrufen dürfen?
Hier würde ich das Geld für ein SSL Zertifikat ausgeben, damit hat man schon mal eine gewisse Grundsicherheit drin.
normaler Weise ist das schon beim xaml dabei.
Width="*"
Hight="*"
Bei den entsprechenden Controls.
Wenn das Fenster dann größer gezogen wird, vergrößern sich auch die Controls.
Aber das Löst nicht dein Problem, du musst auch die Schriftgröße ändern.
Ich muss mal schauen, ich hatte diese Anforderung schon mal von einem Kunden.
Der wollte das der Mitarbeiter die Schriftgröße im Programm ändern kann.
Ok, wenn du komplett Geräteunabhängig sein willst, dann kannst du nur HTML benutzen. Damit spart sich der Benutzer die Installation von einer spezifischen Software.
Aber wenn du Geräteunabhängig sein willst, dann kannst du deine Fragen 1 und 2 vergessen.
Was ist, wenn der WLan Adapter abgeschaltet ist?
Was ist, wenn das WLan eine Identifizierung benötigt? (Username / Password)
Der DNS Server ist auch nicht notwendig, da dieses der Router vom WLan übernimmt.
Dieser beantwortet ja die Frage "Wie ist die IP-Adresse von der Domäne 'jukebox.now' ?". Wenn der Router das selber nicht beantworten kann, dann fragt er beim Internet Service Provider nach.
Nur mit entsprechender Software auf dem Endgerät, kannst du die Punkte 1 und 2 machen. Diese Software kann ja Teil der App sein.
- Prüfen ob eine Verbindung zum Netzwerk besteht. => Netzwerk Adapter in Betrieb nehmen ggf.
- Senden eines UDP Paketes um heraus
zu finden ob die entsprechende Server Software im Netzwerk erreichbar ist.
Aber du möchtest Geräteunabhängig sein, daher kannst du dort keinen Einfluss nehmen.
ich verstehe nicht ganz warum du einen Webserver in deine Software einbauen willst.
Wenn ich dich richtig verstehe, willst du eine Voting Plattform machen. Ich würde da wie folgt vorgehen.
Die ganze Geschäftslogik würde ich hinter einem WCF Service verstecken.
In der Geschäftslogik ist dann enthalten wie du ein "vote" interpretierst.
Dann kann man als nächstest eine ASP.Net WebApplication bauen, die den WCF Service nutzt. Über "WURFL" http://wurfl.sourceforge.net/ kannst du ja erkennen um was für ein Endgerät es sich handelt, und kannst entsprechen diesem den entsprechenden StyleSheet benutzen (CSS).
Und in den weiteren Schritten kann man dann die verschieden App´s für die verschieden Plattformen bauen, die wieder rum nur den WCF Service benutzen.
Deine Aussage, das man für jede Plattform das Rad neu erfinden muss stimmt nicht.
Durch die Kapselung der Geschäftslogik in einen WCF Service, kann ich diese auf jeder Plattform nutzen, mit unter schiedlichsten Sprachen (.Net, Java, Jscript, PHP).
Bei der Oberfläche gebe ich dir bisschen recht, aber auch dort muss man nicht alles neu erfinden.
siehe Mono-Projekt -> Xamarin
.Net + Apple Ios http://xamarin.com/monotouch
.Net + Android http://xamarin.com/monoforandroid
Windows Phone / Windows App können ja nativ in Visual Studio
Wenn ich dich richtig verstehe, dann willst du ein Foto (was eingescannt ist) prüfen ob in den Ecken eine Rot Verfärbung auf tritt.
Ich würde hierfür die Bitmap.GetPixel Methode verwenden. Hier bekommst die Farbe (als Strucktur "Color") zurück.
Dann kann man prüfen ob die RGB Werte eine zu großen Rot Anteil hat.
Dazu musst du aber eine Fläche prüfen.
Wie groß die zu prüfende Fläche ist, kannst du ja selber festlegen.
- 10 x 10 Pixel oder 20 x 20 Pixel
Erst wenn in der Fläche zuviel Rot enthalten ist, kannst du dir sicher sein das dort eine Rot Verfärbung ist.
wenn ich das richtig verstehe, dann hast du einen ETL Prozess. Hier für bietet der SQL Server die Integration Services (SSIS).
Über den SSIS kannst du ein Paket erstellen welches alle deine Schritte macht.
SSIS-Pakete sind so ähnlich wie die Workflow Foundation.
Dort kannst du auch im 2012 C# verwenden (im 2008 war nur VB.Net möglich).
Das Paket legst du dann auf dem entsprechenden Server ab, und erstellst einen SQL Agent Job dafür. In dem Job sollte keine Zeitplanung sein.
Den Job kannst du dann über deinen Taskmanager starten, in dem du folgendes SQL Statement absetzt.
"exec sp_start_job @JobName;"
Der Aufruf ist innerhalb des SQL Server async., damit meine ich die Prozedure warte nur so lange bis der Job erfolgreich angelaufen ist und gibt dir sofort wieder eine Antwort.
Select Count(*) as AnzahlDS, Max(ID-Feld) as MaxID, Min(ID-Feld) as MinID
From <Tabelle>
Group by <alle Felder außer das ID-Feld>
Having (Count(*) ≥ 2)
Dann bekommst du alle Datensätze die doppelt in der Tabelle drin sind, mit entsprechenden ID´s.
Ich würde den Wiederherstellungsmodus schon auf Vollständig lassen, bzw drauf stellen.
Aber das TLog sollte auch mal gesichert werden.
Dann wächst die Tlog Datei nicht so schnell an. Da beim sichern der TLog der gesicherte Bereich wieder freigegeben wird.
Die Datei sieht dass zwar im Dateisystem riesig aus, ist aber fast nicht gefüllt.
Das Kann man sich auch anzeigen lassen über den Enterprise Manager.
SQL-Statment zum Sicher der TLog Datei
Backup Log <Datenbank> To Disk = N'<Pfad>.trn'
go
@Performance Problem:
1) Was sagt das ErrorLog des SQL Server?
2) Wie ist die Fragmentierung des Dateisystems, wo die Datendatei / Logdatei liegt?
-> Wichtig die Logdatei, da die zuerst geschrieben wird. (Unabhängig vom Recover Modus)
3) Wie ist die Fragmentierung der Indexe? (Ich gehe mal davon aus das es Indexe gibt)
4) Wieviel User (Connection sind normaler weise offen) nutzen den SQL Server, und wieviel RAM hat dieser?
5) Darf der SQL Server den Speicher selber verwalten?
6) Wie schnell ist der Netzwerkanschluss?
7) Wie wird der Server aufgelöst? (DNS oder IP Adresse)
Das Tlog verkleinern bringt relativ wenig, da der SQL Server mal den Platz gebraucht hat, und dann kann er immer wieder den Platz brauchen. Ich habe die erfahrung gemacht das das OS nicht schnell genug Plattenplatz zur Verfügung stellen kann, darum versuche ich das TLog immer in einer anständigen Größe zu lassen, in Abhängigkeit zur Datendatei. (OK 4,5 GB ist schon groß.)
Aber du kannst doch die Version ermitteln mit
ExcelObjekt.Application.Version, und dann sagst du das erst ab Excel ab der Version 9 unterstützt (Office 2000 meiner Meinung nach) unterstützt wird.
Zwischen Office 2000 und Höher gibt es nicht mehr die Version Probleme, beim Ansprechen von Excel (nur noch das Dateiformat was sich immer geändert hat, aber die API ist die gleiche).
Die Sortierungssplate ist meiner Meinung nicht notwendig, da man das auch schon mit dem SQL-Statement machen
Select .... From .... [Where...] Order by Bezeichnung -> das Sortiert Bezeichnung von A nach Z
Select .... From .... [Where...] Order by Bezeichnung Desc -> das Sortiet Bezeichnung von Z nach A
Und jenach dem was der Benutzer ausgewählt hat holt man sich so die Datensätze. Falls er sich erst entscheidet wenn der Baum schon aufgebaut ist (nach dem er schon Knoten geöffnet hat) dann brauch man ja nur den letzen Knoten neu laden entsprechend wie der Benutzer das will. Dabei sollte man sich aber merken auf welchem Unterknoten er momentan steht um nach dem erneuten aufbauen des Knoten auch wieder den Unterknoten auswählen zu können.
Leider habe ich momentan kein Codebeispiel zur Verfügung.
wenn ich dich richtig verstanden habe, dann brauchst du nur eine Tabelle
mit der folgenden Strucktur.
Feld Datentyp
ID Int, Auto-Int, oder GUID <das was du als Primarykey einsetzen möchtest>
Beschreibung Tex
RefID <gleicher Datentyp wie dein Primarykey>
Die Datensätze würden dann so aus sehen
ID------Beschreibung----RefID
1------------LaLa---------<Null>
2------------unter LaLa-----1
3------------LiLi-----------<Null>
4------------unter LaLa-----2
5------------unter LiLi-------3
Da durch kannst in einer DB eine Baumstruktur nach stellen.
Das Ergebnis sieht dann so aus
+LaLa(ID = 1)
---+unter LaLa(ID = 2)
------+unter LaLa(ID = 4)
+LiLI(ID = 3)
---+unter LiLi(ID = 5)
Wenn du was verschieben willst (Drag&Drop) brauchts du nur die RefID ändern.
Und du brauchst die Unterknoten erst laden wenn der Benutzer drauf klickt dadurch ist das Programm schneller beim Starten. Weil erstmal nur die RootEbene(alle die Datensätze die in RefID = Null sind) geladen wird. Und Beim Klick auf den Knoten lädst du den Rest nach. Am besten hängst du an den Knoten auch die ID in die Eigenschaft "Tag"
Original von Scarface
Versteh ich nicht. Wenn sich die Logik ändert muss ich zwar die Methoden umschreiben. Die können doch aber ihre Namen behalten. Die musste ich ja sowieso selber da rein schreiben.
Ob ich da nun ein Interface für hab oder nicht ist da doch egal, oder hab ich dich falsch verstanden?
Nun stell dir aber vor das eine neue Klasse hinzukommt die auch die gleichen Methoden haben soll. Über das Interface ist dann gewährleistet das das in allen Klassen die Methoden gleich heißen und du so deinen VB 6 Code nicht mehr ändern musst. (so kann man dan beide Klassen ansprechen ohne den Code zuändern)
Ich versuche es mal an einem Beispiel:
public interface IAuto
{
float GetMaxGeschwindigkeit()
}
public class Trabbi : IAuto
{
public float GetMaxGescwindigkeit()
{
return 100;
}
}
public class Ferari : IAuto
{
public float GetMaxGescwindigkeit()
{
return 300;
}
}
Tipp schau dir mal den PlugIn-Patter an der zeigt sehr gut zu was man Interfaces einsetzt. (Sollte hier im Forum auch mehrere Beiträge geben)
Na ja ich bin mir nicht sicher ob ein Report die Binäry Daten richtig interpretieren kann.
Wo soll er den wissen ob das Bild ein gif, jpg, png , u.s.w. ist. Ich denke schon das Crystal Report ein Steuerelement besitzt was Bilder darstellen kann wie es die Bilder aber erhält (als Pfad oder Binär) keine Ahnung.
Aber eins weis ich MS Access kann Bilder in Berichten machen, dort gibt es ein Steuerelement. Und deshalb denke ich schon das es Crystal Report auch kann.
also ich denke das wenn du das Hide() nicht benutzt dann geht das wie du es willst.
Also wenn es minimiert dann zeige das TrayIcon an, wenn TrayIcon doppelklick dann wieder Fenster vergrössern und TrayIcon entfernen.
Also prinzipell kannst du Bilder in einem Dataset speichern. (sind dann Blob´s)
Du musst die Bilder als Binärstream öffnen und komplett ein lesen. Dann solltest du ein Byte Array erhalten und dieses kannst du dann in ein Dataset(Zelle) rein tun.
Ich weiß aber nicht ob Crystal die BinäryDaten dann auch als Bild interpretiert.
Es wäre vielleicht leichter, wenn du den Pfad zu den Bildern generieren kannst und diesen dann dem Report mit übergeben. Und der report läd dann das Bild.
Beispiel:
Bericht für den Artikel x
Der Artikel x gehört zu der Kategorie n. Dann würde der Pfad so lauten
"\\Server\Berichte\<Kategorie n>\<Artikel x>\<Nummer aus der DB>.wmf"
Original von pee
Hat wer auf die schnelle eine Kommando Zeile, mit der man MSDE problemlos auf seinen Rechner bekommt, und mir damit eine Stunde Readme Lesen und in Foren suchen erspart?
setup SAPWD="<AstrongSaPAsswd>" TARGETDIR="c:\msde" /L*a c:\msdesetup.log frisst er schon mal nicht.
Bei mir hat der dieser Aufruf geklappt. Ich habe " /L*a c:\msdesetup.log " weggelassen und schon ging es.
Wrapper Klassen sind Klassen die dir die Kommunikation mit nicht .Net Komponenten ermöglichen, so das man auch mit .Net das alte ADO einsetzen kann.(als Beispiel)
Die Wrapper Klassen bilden für dich dann ein Schnittstelle zu der Komponete, sie ummandeln praktisch die Komponete.
Das kann deine VS Solution importieren und dann von VB nach C# übersetzen. Und diesen Code auch wieder als VS Solution exportieren. Dann brauchst du nicht mehr soviel nachdenken, sonder kannst dich dann auf das Testen des übesetzen Codes konzentrieren.
Der Konverter nutzt bei #develop Reflection und kann so fast Fehlerfrei übersetzen.
Wenn man ein Byte in ein Ascii-Zeichen umwandeln, kann es passieren das das Byte ein Zeichen erzeugt was man nicht sieht. Ascii-Zeichen die sichtbar sind fangen erst bei 32 (int) an davor sind es einfach Steuerzeichen Tab, neue Zeile, Dateiende, u.s.w. (siehe Ascii-Zeichen-Tabelle).#
Aber ich würde dir vorschlagen die Bytewerte in einen int zucasten und diese dann in eine Datei schreiben, dabei musst du dir aber ein Trennungszeichen überlegen (Komma, Semikoln, neue Zeile) damit du unterscheiden kannst wo ein Byte aufhört und wo es anfängt. Das Trennungszeichen kann alles sein, ist deiner Phantasie überlassen, ausser Zahlen natürlich.
Soviel wie ich weiß kann du ja auf die Tabellen im DataSet zugreifen und sagen "gib mir alle die sich geändert haben" (glaube "select"). Und als Ergebnis bekommst du die Rows die sich geändert haben. Dann kannst du ja wieder deine Update-Comandos zusammen bauen und an die Datenbank schicken.
Ich denke nicht das du in ein Update eine Join-Bedingung einbauen kannst, bin mir da aber nicht sicher.
#develop (Version 1 - Fidalgo) unterstützt das .Net Framework 2 nicht, das hat was mit der neuen Struktur zu tun. MS selber sagt das die beiden Frameworks zu einander nich kombatible sind.
#develop (Version 2- Corsavy) wird dann auch nur noch das .Net Framework 2 unterstützen. Diese Version (als Beta) wird wahrscheinlich 1 - 2 Monate nach dem Release des .Net 2 raus kommen.
Diese Infos habe ich aus einem Webcast von MSDN, dazu muss man sich aber dort anmelden. Was ja nicht weiter schlimm ist. Das WebCast heißt: ".Net Entwicklung zum Nulltarif mit #develop" mit Uwe Baumann (gehört zum Stammteam von #develop)
ich weiß nicht ob es geht. Aber ich bevorzuge da lieber die DBA Tools von den DBMS.
In deinem Fall "MySql" gibt es da ja drei Tools von MySql selber.www.mysql.com
Na ja die Tabelle selber zu analysieren hat den vorteil das du nicht für jedes DBMS seine Besonderheiten beachten musst.
Also Oracle stellt dir dafür zum Bespiel den Sql-Befehl Desc (kommt in dem Fall von Description und hat nichts mit dem sortieren zu tun), beim SQL Server musst du in sysobject Tabelle schauen.
Ich meine was alle DB machen ist, dass bei einem "Select * From <Tabelle>" ein Ergebniss zurückliefern wird und das kann man ja analysieren.