-
Gesamte Inhalte
801 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von Maulwurf_der_Schlaue
-
-
Hallo,
wenn Du von "Task" sprichst kannst Du entweder deine Anwendung in den Autostartordner legen oder einen "geplanten Task" in der Systemsteuerung anlegen, der dein Programm alle 15 Minuten startet.
Solltest Du allerdings einen "Service" bzw. "Dienst" meinen kann Tante Google bestimmt helfen.
-
Hallo Diminbg,
willkommen an Board ^^.
Zu deinem Problem:
Eine Eingabefenster erzeugst Du indem Du einen Namen eingibst der nicht in deiner Datenquelle (meist Tabelle / andere Abfrage) vorhanden ist.
Beispiel:
select * from filme where titel like EingabeTitel or darsteller like EingabeDarsteller or Regisseur like EingabeRegisseur
In diesem Beispiel sind die Namen EingabeTitel, EingabeDarsteller und EingabeRegisseur nicht in der Tabelle Filme, deshalb frag Access dann nach einem Wert den es einsetzten muss.
Wenn Du jetzt bei einem Wert nichts eingibst weil Du alles suchst,
muss ich Dich enttäuschen, hier musst Du einen * (Stern) eingeben.
(* = Platzhalter für beliebig viele Zeichen)
Wenn Du also bei allem einen Stern eingibst erhälst Du alle Einträge.
Gibst Du bei Titel "Titanic" ein und bei den anderen einen Stern erhältst Du alle Treffer die exakt "Titanic" sind.
(jeweils ohne ")
Jetzt lass ich Dich mit den Informationen mal etwas ausprobieren
-
Hallo,
da wir anscheinend so nicht weiterkommen hab ich mich entschlossen - nur weil ich Zeit und Lust hatte - Dir eine Komplettlösung zu geben:
Hinweis: Verwenden des Skiptes ohne Gewähr und auf eigene Gefahr.
Auf meinem System hat es mit einem Testordner sehr gut funktioniert.
@echo off echo. echo == BEREINIGEN EINES ORDNERS == rem Mehr Output rem [true] = Ausgabe zusätzlicher Zeilen rem [false] = Minimale Ausgabe set debugmode=false rem Verzeichnis in welchem die Dateien geloescht werden sollen set delpath=C:\Users\Name\Desktop rem Benutzerdefiniert Ausnahmen festlegen (Dateierweiterung) set skipfile1=lnk set skipfile2=db set skipfile3=ini @echo. @echo Dateien loeschen... for /f "usebackq tokens=1,2 delims=." %%a in (`dir %delpath% /a:-d /b`) do ( if '%debugmode%' == 'true' ( @echo "[----------------------------------------]" @echo Pruefe: '%delpath%\%%a.%%b' [Endung: %%b] ) if not '%%b' == '%skipfile1%' ( if not '%%b' == '%skipfile2%' ( if not '%%b' == '%skipfile3%' ( @echo [LOESCHEN] '%delpath%\%%a.%%b' [COLOR="DarkRed"]rem Entferne REM vor erase zum ENTGÜLTIGEN löschen rem erase %delpath%\%%a.%%%b[/COLOR] ) ELSE ( if '%debugmode%' == 'true' ( @echo [IGNORE] Dateiendung [%skipfile3%] ) ) ) ELSE ( if '%debugmode%' == 'true' ( @echo [IGNORE] Dateiendung [%skipfile2%] ) ) ) ELSE ( if '%debugmode%' == 'true' ( @echo [IGNORE] Dateiendung [%skipfile1%] ) ) ) rem Setvariablen aufloesen set delpath= set debugmode= set skipfile1= set skipfile2= set skipfile3= echo. echo ABGESCHLOSSEN !
Über Start->Ausführen->CMD öffnen und cleanup.bat starten.
Möchtest Du die Ausgabe als Log-File haben mach folgendes: cleanup.bat >> cleanup.output.txt
-
Hi,
[...]@echo off [...] for /f "tokens=1,2 delims=." %i in (%delfile%) do @echo %j %i / %i.%j [...]
Du weißt schon was der Befehl da macht?
[...]Kann ich eigentlich im for-Befehl annstat ' auch " setzen, oder gibs da ne regelung ?
Kommt darauf an, für Dateinamen gibt es in der Hilfe folgenden Text zu finden:
[...] Dateinamen, die Leerzeichen enthalten, müssen Sie innerhalb doppelter Anführungszeichen angeben. Dazu müssen Sie die Option "usebackq" verwenden. Andernfalls werden doppelte Anführungszeichen zur Definition eines auszuwertenden Literals verwendet. [...] -
Hallo,
[...] Wenn ich jetzt das ,,Full Screen Logo'' ausschalte, kommt der erste Bildschirm gar nicht mehr [...]Ja es kommt nicht mehr weil Du es ausgeschaltet hast.
Spass bei Seite.
Was meinst du mit jetzt kommt kar nichts mehr?
Fährt er jetzt nicht mehr hoch oder wie?
Meinst Du vllt. den Bildschirm wo er den Hauptspeicher anzeigt und den Prozessor etc.?
-
Hi,
also jetzt hast das Thema schon eröffnet,
dann sag uns doch bitte noch wie Du das Problem jetzt gelöst hast.
Danke.
-
Hi,
[...] Da für jeden Film (für jeden User) eine neue Datei zu speichern, würde wohl schnell in Chaos ausarten. [...]
also eigentlich dachte ich das Du da nur eine Datei hast.
Beispiel:
name movie mov-index
user001 abc 0001 user001 abc dek 0002 user001 def 0003 user039 akc 0001 user040 dkeu 0001 user001 dkudi 0004
jetzt muss halt die "einlese-funktion" die einzelnen Datensätze lesen und in das dafür vorgesehene Array speichern.userram = record name:string[20]; saw: array of movie; end;
ungefähr so:userram.name = "user001 " for zeile in datei.txt do begin // angenommen du willst nur die daten von user001 if userfile.name = userram.name begin // weiteren Platz für Array-Element schaffen setlength(userrram.saw, high(userram.saw)+1) // daten ablegen userram.saw[High(userram.saw)].name := userfile.movie end; end;
Wie mir soeben auffällt braucht man den Index nicht wirklich , aber egal.
-
Hallo,
[...] IF NOT '%%a' == %skipfile% [...]
so wie das da steht wird des nicht funktionieren.
Du vergleichst "dateiname.txt" mit "*.txt".
Du musst den for-befehl anpassen, um zum vergleich die Dateiendung zu haben. Hier ein Beispiel:
for /f "tokens=1,2 delims=." %i IN (dateien.txt) do @echo %j %i / %i.%j
dateien.txt habe ich erstellt mitdir /b >> dateien.txt
Zum verknüpfen deiner Ausschlüsse kannst Du im do-Bereich der for-Schleife einen Verschachtelten If-Block verwenden:for ... do if not '%j' == '%skipfile%' ( if not '%j' == '%skipfile1%' ( @echo Lösche Datei %i !! ) ELSE ( @echo %i Datei nicht löschen. ) ELSE ( @echo Verschone %i Datei vor dem löschen. )
Sieht ein wenig kompliziert aus aber so ist das eben
eine Komplettlösung gibt's es nur selten
Falls Du noch Informationen zum einem Befehl brauchst gib in der Konsole
einfach /? ein.
Für weitere Hilfe zum dir-Befehl => dir /?
Für weitere Hilfe zum for-Befehl => for /?
-
Hallo,
Hallo Leute,[...] Zu Hause habe ich überall eine GBit Anbindung. [...]
Wenn du WLAN verwendest solltest du dir das nochmal überlegenHab ich was verpasst?
Seit wann gibt es 1Gbit-WLan zu kaufen?
-
Hallo,
oft wird das auch als "Top N Analyse" bezeichnet.
In Verbindung mit deinem Namen der Datenbank solltest Du bei Tante google fündig werden.
-
Hallo Zakum,
ich hätte einen Lösungsansatz.
userfile = record index:string[12]; name:string[20]; saw: movie; favGenre: string[20]; favActor: array[1..7] of string[20]; favDirec: array[1..3] of string[20]; end;
Hast Du jetzt zwei Einträge - Array von Länge 2 - so musst Du zwei Einträge speichern jeweils mit dem gleichen Index - Index könnte Datum + Uhrzeit sein, hängt davon ab wie schnell du Daten erzeugst. Du kannst ja einen zweiten Typ anlegen der so ist: (wie der von Dir zuvor definierte)userram = record name:string[20]; saw: array of movie; favGenre: array of string[20]; favActor: array[1..7] of string[20]; favDirec: array[1..3] of string[20]; end;
und dann eine Routine schreiben welche die Daten von userfile in den userram
umwandelt und zurück. Anhand des Indexes könntest Du dann erkennen welche Einträge zusammengehören.
Hoffe das ich meinen Gedankengang ausreichend gut in Wortform gebracht habe.
Der Fehler müsste doch für favGenre auch kommen, oder nicht?
-
Hallo,
vielen Dank nochmal für den Link, scheint zu funktionieren.
Ist mir jetzt fast schon peinlich das ich den nicht selber finden konnte...
-
Hallo,
werde ich ausprobieren.
Du wirst lachen aber zu so einen ähnlichen Artikel Beschreibung: des Pack 1 Access 2003-post-service-Hotfix-Pakets: 20. August 2004 habe ich gefunden, dann hab ich versucht irgendwie von da aus was neues zu finden, leider erfolglos.
Danke schonmal.
-
Hallo zusammen,
ich habe hier eine Access-Datenbank welche immer einwandfrei funktioniert hat. Die Datei wurde in Office 2000 erstellt und jedesmal konvertiert wenn eine neue Version von Office erschienen ist.
Jetzt habe ich das Problem das Anwender mit Access 2003 SP3 keine Berichte und Abfragen mehr öffnen können, es kommt die Meldung "Access hat ein Problem festgestellt ..."
Unter Office 2003 (SP2) hat es aber noch funktioniert.
Kennt jemand einen Hotfix oder eine andere Lösung um dieses Problem zu lösen.
Googeln und suchen im Board haben mich nicht weitergebracht.
- Leider kann ich wegen internen Richtlininen kein Office 2003 SP2 installieren bzw. installiert lassen weil es sich selbst aktualisiert.
- Eine neue Datei im 2003er Format erstellen und alles Importieren hat leider nicht funktioniert.
Für Anregungen und Tipps bin ich dankbar.
-
Hallo JesterDay,
ich wollte Dir in keiner Weise zu nahe treten, ich bin doch froh das Du Dir das
überhaupt ansiehst. Es existiert kein Zeitdruck oder ähnliches, es dient ja als
Lern Beispiel wie man mit Threads umgehen kann.
Ich werde versuchen mit der Delphi-Hilfe besser klar zu kommen.
Genauso wenig drehe ich dir einen Strick daraus wenn da etwas im Programm
nicht funktioniert hat. Das meine Eigenarbeit weiterhin erforderlich ist habe ich
nicht ausgeschlossen. Ich dachte ich schreib Dir welche Probleme noch
aufgetreten sind da ich deine Vorschläge verwendet habe.
Also die Delphi Hilfe hilft dir bestimmt so gut wie ich. Da hab ich auchviel gelernt.
Die Hilfe wird niemals einen Menschen ersetzen können , auch wenn sie noch
so gut ist.
Werde mir das mit der "Set of"-Thematik mal ansehen.
-
Hallo,
neben den bereits genannten Titeln, habe ich noch folgendes
RedSteel: Finde die Steuerung recht interessant (Schwertkampf) ist aber etwas eintönig und ist nur in speziellen Szenen einsetzbar. Ansonsten ist es ein Shooter wie FarCry. Meine persönlich Wertung: [0]----x----[+]
-
Hallo,
hast Du schon mal ein Bios-Update gemacht?
Kann zwar nicht garantieren das das was bringt, nur als ich mal ähnliche
Probleme mit dem Sound hatte hat das geholfen.
Ansonsten wüsste ich dazu auch keinen besseren Ratschlag.
-
Nachdem ich mit lachen fertig bin muss ich doch auch was schreiben
Find die Antworten einfach super klasse
Also meine Vorschläge:
1. Wenn Du den Fernseher nicht willst dann verkauf ihn halt bei eBay oder so.
2. Anscheinend hast Du kein Geld, oder kannst nicht ran. Dann geh arbeiten.
also ich mein bezahlte Ferienarbeit, Zeitung austragen etc.
Meinst Du nicht das deine Eltern etwas komisch vorkommt wenn Du Geld für ein neues Gerät willst, die dir sagen nur wenn das alte kaputt ist und
plötzlich ist dann dein Fernseher kaputt ??
Also mich als Elternteil käme das sehr verdächtig vor.
Das mit den geladenen Netzteilen war mir auch nicht bewusst, gut das ich noch nie einen Fernseher oder ähnliches aufgeschraubt habe
<Nachtrag> den PC mal ausgenommen </Nachtrag>
-
Guten Abend,
habe mir jetzt den ganzen Nachmittag bis jetzt das Programm angesehen und
habe zur Vereinfachung ein neues geschrieben mit den wesentlichen Verbesserungen.
Die neue Version befindet sich im Anhang.
Nachdem die Syntaxfehler behoben waren, die man automatisch macht wenn
man den Code nur im "Windows Editor" schreibt bekam ich noch echte
"Probleme".
Ich erhielt ständig Zugriffsverletzungen im Speicher. Ich kam nicht dahinter
wie/wo diese entstehen bzw. es mir unerklärlich war, habe ich kurzerhand
einfach Version 2.0 erstellt. Selbstverständlich mit den entsprechenden
Verbesserungen und sogar ein wenig den Stil beachtet
Es kam dann zu folgenden Problemen:
Das Programm ist immer abgestürzt als es den FreeAndNil-Befehl durchführte.
Deswegen habe ich diesen dann entfernt , hörte sich von der Definition nach
nicht schlecht an. Wobei ich sowieso nicht sicher bin ob es
FreeOnTerminate := True und FreeAndNil() gemeinsam bringen.
Vielleicht weiß jemand (*schiel zu JesterDay*) mehr
Das nächste war von der Grundfunktion her:
Bei meiner Version konnte man nachdem man 12 Threads gestartet hatte und
diese fertig waren, erneut 12 Threads starten. Dies ging in der neuen Version
nicht mehr da hier das Array dynamisch erweitert wurde mit SetLength().
Es war z.B. möglich wenn 12 Threads liefen und einer davon fertig war, man
sofort wieder einen "nachstarten" konnte, weil ja wieder ein Platz frei wurde
von den maximal 12 .
Da war meine Version dann doch einfacher umzusetzen mit for.to.do
-> Hab aber trotzdem Teile übernommen, jetzt muss man nur eine Konstante
ändern um das Array zu vergrößern/verkleinern. (Böse Falle ist weg )
Sonst hat bei Version 2.0 alles gepasst
Ich wusste z.B. das Variablen in der OnTerminate-Prozedur nicht mehr
verfügbar sind, weswegen ich dies umständlich gelöst habe. Durch den
modifizierten Code habe ich festgestellt das das nicht für "Properties" gilt.
Somit konnte ich den Event OnTerminate des Threads verwenden.
Ich hab diesmal sogar Kommentare hinterlassen
Sind zwar noch nicht so gut wie die von JesterDay aber die Übung macht den
Meister
Vielen Dank JesterDay. :uli
-
Hallo JesterDay,
werde mir deine Verbesserungen ansehen.
Danke.
-
Hallo zusammen,
ich konnte mich leider nicht eher melden, dafür hab ich aber was mitgebracht :cool:
Ich denke das Problem mit den verschollenen Threads habe ich behoben.
Habe mir hierzu ein kleines Programm geschrieben, um die Thread-Thematik ohne großes "Drumherum" zu analysieren.
Da ich das Programm geschrieben habe, wird auch mein "unschöner" Code verwendet.
Damit ich aber auch hier etwas dazulernen kann, bitte ich euch das Ihr über mein Programm schaut und mir dann mitteilt wie man das "schöner" lösen könnte.
Schon einmal vielen Dank vorab.
Ich bitte um Verständnis das ich zum Thema Programmierstil in diesem Fall kein neues Thema eröffne, da es sonst aus dem Zusammenhang gerissen werden wird.
-
Hallo JesterDay,
erstmal danke für eine ausführlichen Antworten.
Natürlich kannst du das im Hauptformular visualisieren und auch sonst alles tun was du willst.
Das dachte ich mir schon fast das das geht, nur weiß _ich_ nicht wie das geht.
Hätte mich vllt. anders ausdrücken sollen.
-
Hmmm, threads in Delphi sind schon eine Weile her... ich versuch es mal.
Erstmal, was mit gleich aufgefallen ist:
... * code aus Platzgründen entfernt * ...
var im protected?
Willst du deine Threads weitervererben? Oder die Variablen irgendwem sonst zugänglich machen? Denke doch nicht.
Also solltest du die ganz normal als Felder im Private des threads deklarieren:
Ok, das habe ich wie vorgeschlagen korrigiert. Hierzu habe ich keine Einwände weil es einfach so stimmt
... * code aus Platzgründen entfernt * ...
Und ohne var davor.
Weiter die Einbindung von Form1. :eek
Ich hab jetzt keine Delphi-Hilfe mehr da oder sonst was, aber sowas ist ein abolutes NoGo.
Zum einen beziehst du dich direkt auf den Formnamen (wobei form1 auch nicht form1 heißen sollte, aber egal ). Wenn du den mal änderst? Oder wenn du die Threads in einem anderen Programm verwenden willst? Wenn du ein zweites Formulas hinzufügst, was dann den Threadaufruf startet?
Der Sinn der modularen Programmierung ist ja, dass die Module (die einzelnen Units) recht frei verwendet werden können, auch in anderen Programmen. Genau das verhinderst du ja hier, weil du alles von deinem Hauptformular abhängig machst.
Soweit habe ich mir noch keine Gedanken gemacht ob ich die Unit wirklich in anderen Projekten verwenden möchte. Ich arbeitet zurzeit an der fünften Version des Programms. Die Threads sind in dieser Version neu weil ich so mehrere Aufgaben gleichzeitig verarbeiten kann ohne auf "Wartezeiten" andere Faktoren Rücksicht nehmen zu müssen.
Also:
Die Prozedur AusListeEntfernen entfernen. Das uses Code entfernen.
In der Objektorientierung gibt es etwas wunderbares, nämlich die Events. Ein TThread bietet auch ein paar Events, unter anderem das OnTerminate-Event.
Das wird genau dann abgefeuert, wenn der Thread sich beendet.
Das solltest du dann auch nutzen.
Ich kenn die genaue Signatur des Events nicht mehr, aber die Hilfe sagt dir da ne Menge. (Hab ich schonmal gesagt, dass ich die Delphi Hilfe liebe? Ich hab noch keine Hilfe gesehen, die so ausführlich und gut ist wie die von Delphi. Weder Visual Studio, MSDN, noch Java oder ähnliches haben auch nur annähernd so eine gute Hilfe wie Delphi!)
Falls du das noch nie gemacht hast hier eine kleine Erklärung:
Einem Event kannst du eine Prozedur zuweisen, die dann ausgeführt wird, wenn das Event aufgerufen wird. Die Prozedur kann irgendeine sein, sie muss nur dieselben Parameter haben wie die geforderten. du kennst es vielleicht, wenn du einen Doppelklick auf einen TButton machst in Delphi. Dann legt Delphi eine ButtonClick Prozedur an und weißt die auch gleich dem Event zu. Das machst du hier auch, nur händig.
... * code aus Platzgründen entfernt * ...
Somit wird deine Prozedur aufgerufen, sobald der Thread sich beendet.
Wenn ich das mit OnTerminate erledige, was durchaus auch in Ordnung wäre habe ich keine Möglichkeit mehr im Hauptformular das Ereignis zu visualisieren.
Bisher konnte ich genau herausfinden welcher Thread fertig war und welcher noch nicht. Hierzu ist eben der Griff über "Form1" nötig.
Signatur : OnTerminate(Sender: TObject)
Was das Problem bei deinem Code sein kann:
... * code aus Platzgründen entfernt * ...
Wenn UrlDownload einen Fehler Produziert, wird AusListeEntfernen nicht aufgerufen! Das solltest du in finally schreiben, dass das also auf jeden Fall aufgerufen wird. Und um einen Fehler abzufangen musst du eh Try Except benutzen
Ich dachte immer das alles nach end des finally auch durchlaufen wird.
Werde diese Fehlerquelle korrigieren.
Werde nochmal einen Langzeittest durchführen um zu sehen ob das Programm immer noch Threads verliert oder ob es sich gebessert hat.
Danke für bereits geleistet Unterstützung.
-
Hallo liebe Community,
ich habe ein Problem bei der Thread-Programmierung.
Ich starte mehrere Threads, viele dieser gestarteten Threads melden sich
ordnungsgemäß ab (über Synchronize). Doch es gibt einige schwarze
Schafe welche diese "Bin-Fertig"-Routine nicht durchlaufen, obwohl
es keinen Umweg gibt.
Den Thread starte ich so:
(* viel Code vorher *)
(* Neuen Thread erzeugen und in Array merken*)
AktivThreads[idxAktivThread] := TDownload.Create(
(* Erster Parameter : Speicherort *)
linkSaveName,
(* Zweiter Parameter : Quelle *)
link,
(* Dritter Parameter : Zusätzlich Identifikations#
da ThreadID doppelt vorkommt *)
threadUID,
(* Vierter Parameter : Create Suspended *)
True
);
(* viel Code nachher *)
[/PHP]Der Thread selber sieht so aus:
[PHP]
unit Download;
interface
uses
Classes, UrlMon;
type
TDownload = class(TThread)
public
constructor Create(pSpeichort: String; pLink: String;
pUniqueID: String; CreateSuspended : BOOLEAN = TRUE);
private
protected
procedure Execute; override;
(* Synchronisierter Zugriff auf Hauptthread *)
procedure AusListeEntfernen;
var Speicherort: String;
SourceFile: String;
UniqueID: String;
end;
implementation
(* Code ist das Hautpprogramm *)
uses Code;
(* Überladene Create-Funktion zur Variablen Übergabe *)
constructor TDownload.Create(pSpeichort: String; pLink: String;
pUniqueID: String; CreateSuspended : BOOLEAN = TRUE);
begin
Inherited Create(CreateSuspended);
Speicherort := pSpeichort;
SourceFile := pLink;
UniqueID := pUniqueID;
end;
procedure TDownload.AusListeEntfernen();
begin
Form1.ThreadEntferneAusListe(Self.ThreadID, UniqueID);
end;
procedure TDownload.Execute;
begin
try
UrlDownloadToFile(nil, PChar(SourceFile), PChar(Speicherort), 0,nil);
finally
(* keine Aktion nötig, soll nur nicht abstürzen bei Fehler *)
end;
Synchronize(AusListeEntfernen);
end;
end.so und jetzt noch die Synchronisierte Funktion im Haupt-Thread:
procedure TForm1.ThreadEntferneAusListe(ID: Cardinal; UID: String);
var index : byte;
ThreadFound : Boolean;
begin
ThreadFound := False;
(* Array Durchlaufen und entsprechenden Thread finden *)
for index := 1 to maxDownloadThreads do
begin
if (AktivThreads[index].ThreadID = ID) and
(UniqueIDs[index] = UID) then
begin
AktivThreads[index] := nil;
Protokoll.Lines.Add('Thread #' + IntToStr(index) +
' mit ID ' + IntToStr(ID) + ' beendet.');
(* weiterer kurzer Code um Ereignis sichtbar zu machen *)
ThreadFound := True;
end;
end;
if not ThreadFound then
begin
Protokoll.Lines.Add('**SPEICHERLECK** Thread' +
' mit ID ' + IntToStr(ID) + ' nicht gefunden!');
Sleep(500);
end;
end;
[/PHP]Die Meldung mit dem Speicherleck hatte ich noch nie!
Das heißt eigentlich das alles Threads immer Ordnungsgemäß funktionieren müssten, leider "verliert" das Programm Threads. Sie melden sich einfach nicht
ab, obwohl er fertig sein müsste.
Ich weiß nicht wie das Problem entsteht, vllt. habe ich einen Denkfehler oder etwas falsch implementiert.
Ich hoffe Ihr könnt mir einen Tipp geben an welcher Stelle ich etwas besser machen kann/sollte/muss .
Danke vorab!
Fehlermeldund bei IE 7.0!
in Anwendungssoftware
Geschrieben
Hallo,
kurze suche bei Tante Google nach "Add-Ons verwalten deaktiviert" hat folgendes gefunden:
Quelle: Quelle zum Zitat