Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 128
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27.09.2010, 17:43   #1 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard Listview - Tabelle in eine andere kopieren

Hallo zusammen, bin gerade wieder am schrauben & auf ein kleines Prob gestoßen, bei dem mir jetzt langsam die Ideen ausgehen:
Auf einem SQL-Server befinden sich eine Anzahl DB's, die u.a. jeweils eine Tabelle enthalten, deren Struktur identisch ist. Diese Tabellen möchte ich "einsammeln". Mit der Funktion 'LVSQL sqlbefehl, listview' kann ich ja das Abfrageergebnis direkt in ein Listview packen. Allerdings überschreibt die 2. SQL-Abfrage die bestehenden Daten im listview. OK - macht ja nichts, dann kopiere ich vor der nächsten Abfrage einfach dieses Listview in eine "Endtabelle". So, als ob ich mit einem Eimer nach & nach ein Fass fülle...
Das Problem: der erste Eimer landet auch noch im Fass, alle folgenden sind nicht zu sehen. Der Clou: es werden in der Zieltabelle auch artig die entsprechenden Zeilen erzeugt - nur sie sind leer!
Um den Fehler einzukreisen, habe ich dazu ein kleines Testprog geschrieben & will es hier mal zum probieren reinstellen. Es ist sofort lauffähig (Listview.dll, Listview_Funktionen.inc & Listview_Dispose.inc müssen vorhanden sein)
Ich fülle hier einfach eine Quelltabelle mit Daten & versuche diese dann MEHRMALS in eine Zieltabelle zu kopieren. Ich kann aber einfach nicht den Schweinehund finden, der mir da in die Suppe k.....!
Die erste Kopieraktion von 4 funzt, der Rest landet im Nirvana In der Zieltabelle sollten 4x die Zahlenfolge 0-19 enthalten sein.
Code:
'testprog, um den inhalt einer tabelle mehrmals in eine andere tabelle zu kopieren

Windowstyle 543
WindowTitle " Test: ein Quell-LV MEHRMALS in ein Ziel-LV kopieren"
Window 0,0-600,800

declare lv1&   'nimmt das handle für die gesamttabelle auf
declare lv2&   'nimmt das handle für die zwischentabelle auf
declare gro&   'nimmt die speichergröße für jeweils eine zwischentabelle auf
declare speich#   'bereichsvariable für aufnahme des inhaltes der zwischentabelle
declare txt#   'bereichsvariable für die aufnahme von texten
declare lvdll&
dim txt#, 120  'speicherbereich für die aufnahme von texten reservieren

$I Listview_Funktionen.inc                 'funktionen für die listview laden
lvdll&=usedll("Listview.dll")              'listviev.dll laden

'quell- & ziellistview erstellen
lv1&=CreateListView(%hwnd,%hinstance,0,-1,-1,$20) 'quelle
buildlistview(lv1&,1,20,50,0) 'eine spalte anlegen & 20 zeilen

lv2&=CreateListView(%hwnd,%hinstance,0,-1,15329769,$21)'ziel 
buildlistview(lv2&,1,0,50,0) 'eine spalte anlegen
SetColumnName(lv2&,"Ziel",0) ' spaltenname für zieltabelle

'quelltabelle (lv1) mit testwerten füllen
whileloop 0,20
    string txt#,0 = &loop 'momentanen &loop-wert in den bereich schreiben
    setitemtext(lv1&,txt#,0,&loop)'inhalt des bereiches in der momentanen zeile von lv1 schreiben
endwhile
print "quelltabelle enthält", getlines(lv1&),"zeilen"
print

'zieltabelle mehrmals mit den werten der quelltabelle füllen
whileloop 0,3
    gro& = getneededmemory(lv1&,1) 'speicherbedarf der quelle ermitteln um sie in einem bereich zu schreiben
    Dim speich#,gro& 'bereichsvariable für die zuvor ermittelte größe ermitteln reservieren
    listviewtoraw(lv1&,speich#) 'zwischentabelle in den reservierten speicherbereich kopieren
    rawtolistview(lv2&,speich#) 'zwischengespeicherte daten aus speicherbereich in die zieltabelle anhängen
    dispose speich#
    print "zieltabelle enthält", getlines(lv2&),"zeilen"
endwhile

ShowListView(lv2&,300,20,70,500)'ziel-listview sichtbar machen

while 1
  waitinput
  if %key = 2
        freedll lvdll& 'listview.dll entladen
        $I Listview_Dispose.inc '
        dispose txt# 'speicherbereich freigeben
        dispose speich# 'speicherbereich freigeben
        end
  endif
endwhile
end
Danke & Gruß
Jörg
JörgG ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 27.09.2010, 19:20   #2 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Im Listview-Paket sind Quellcodes, die Spalten oder Zeilen kopieren. Ich meine, dort benutze ich eine viel schnellere Technik. Hast du dort schonmal reingesehen?
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 27.09.2010, 21:08   #3 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Zitat:
...dort benutze ich eine viel schnellere Technik. Hast du dort schonmal reingesehen?
Jo Frank, habe ich. Ich bin spontan (reines Bauchgefühl) davon ausgegangen, das die ListviewToRaw/RawToListview Technik schneller ist als in einer Schleife mit CopyLineTo jede Zeile einzeln zu kopieren, aber wenn du sagst, daß CopyLineTo schneller arbeitet, dann werde ich dies natürlich bevorzugen
Da ich aber im nächsten Schritt ein lokales Speichern & Laden dieser Daten plane & ich dafür ListviewToRaw/RawToListview in Verbindung mit WriteFileQuick/ReadFileQuick verwenden möchte, wäre es trotzdem sehr hilfreich zu wissen, warum mein Testprog so nicht funzt...
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 27.09.2010, 22:25   #4 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Jetzt wo du es sagts glaube ich nicht mehr, dass die Technik schneller ist. Hach ich kann ja nicht jeden Code im Kopf mit mir tragen.

Heute komme ich leider nicht mehr zum Austesten.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 27.09.2010, 22:46   #5 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

kein Problem, ich friemel inzwischen weiter, vllt entdecke ich was. Meine Listview.dll hat die VersionsNr. 2112; bin ich damit aktuell?
bis dann...
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 28.09.2010, 08:04   #6 (Direktlink)
MoRoGeP-Träger 2011
 
Benutzerbild von horsthorn
 
Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
Beitrag

@Jörg
Habe deinen Code unverändert laufen lassen und das kam dabei raus

__________________
Gruss, horst
Computer werden kleiner und kleiner, bald verschwinden sie völlig.
(Ephraim Kishon 1924-2005)

Win7-Home-Premium 32-Bit - XProfan12.0ß-S14 - Chrome-18.0.1025.142 m
http://www.web-treffpunkt.de
horsthorn ist gerade online   Mit Zitat antworten
Alt 28.09.2010, 09:50   #7 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Hi Horst,
das ist ja niedlich! &loop beinhaltet eigentlich den Wert, der in das Item geschrieben werden soll. Das erledigt diese Schleife:
Code:
'quelltabelle (lv1) mit testwerten füllen
whileloop 0,20
    string txt#,0 = &loop 'momentanen &loop-wert in den bereich schreiben
    setitemtext(lv1&,txt#,0,&loop)'inhalt des bereiches in der momentanen zeile von lv1 schreiben
endwhile
Verhält sich möglicherweise xProfan8a anders als deine aktuelle Version?
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 28.09.2010, 10:25   #8 (Direktlink)
MoRoGeP-Träger 2011
 
Benutzerbild von horsthorn
 
Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
Beitrag

@Jörg
Zitat:
Verhält sich möglicherweise xProfan8a anders als deine aktuelle Version?
Da bin ich überfragt und die Version 8a habe ich nicht.
Roland könnte da etwas Aufklärung geben (wenn der Steuerbescheid fertig ist )
__________________
Gruss, horst
Computer werden kleiner und kleiner, bald verschwinden sie völlig.
(Ephraim Kishon 1924-2005)

Win7-Home-Premium 32-Bit - XProfan12.0ß-S14 - Chrome-18.0.1025.142 m
http://www.web-treffpunkt.de
horsthorn ist gerade online   Mit Zitat antworten
Alt 28.09.2010, 11:45   #9 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Zitat:
...die Version 8a habe ich nicht.
ich denke mal, daß ich mir demnächst wohl die aktuelle xProfan zulegen werde. Da gibt es doch schon einige Sachen, die mich interressieren
Das mit dem &loop ist aber hier auch nebensächlich. Auch bei dir wird deutlich, daß zwar 80 Zeilen erzeugt wurden, aber nur 20x der Wert von der Quell- in die Zieltabelle kopiert wurde. Ich vermute, ich wende die Funktionen ListviewToRaw/RawToListview falsch an bzw sie reagieren anders, als ich erwarte. Vllt liegt das auch an der Bereichsvariablen, die scheint ja ab dem zweiten Durchlauf leer zu sein
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 28.09.2010, 13:16   #10 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Ich glaube das Problem ist RawToListview(lv2&,bereich#) .
Es werden nur Leerzeilen beim 2. Kopieren erzeugt.
Code:
'testprog, um den inhalt einer tabelle mehrmals in eine andere tabelle zu kopieren

$I Listview_Funktionen.inc    
var lvdll&=usedll("Listview.dll")

cls

var lv1&=CreateListView(%hwnd,%hinstance,0,$FFFFFF,-1,$31)
InsertColumn lv1&,"LV-1",60,0

var lv2&=CreateListView(%hwnd,%hinstance,0,$FFFFFF,-1,$31)
InsertColumn lv2&,"LV-2",60,0

var lv3&=CreateListView(%hwnd,%hinstance,0,$FFFFFF,-1,$31)
InsertColumn lv3&,"LV-3",60,0

ShowListView(lv1&,100,20,70,400)
ShowListView(lv2&,200,20,70,400)
ShowListView(lv3&,300,20,70,400)

'quelltabelle (lv1) mit testwerten füllen
whileloop 20
    setitem(lv1&,str$(&loop))
endwhile

declare bereich#,text$,x&,y&,bytes&
dim bereich#,32000
ListviewToRaw(lv1&,bereich#)

RawToListview(lv2&,bereich#) '1. Einfügen
RawToListview(lv2&,bereich#) '2. Einfügen

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ über *.csv
    text$="Test.csv"
    x&=GetNeededMemory(lv1&,1)
    Dim bereich#,x&
    x&=ListviewToCsv(lv1&,bereich#,0,0)
    x&=WriteFileQuick(addr(text$),bereich#,0,x&)
    Dispose bereich#

  bytes&=@FileSize(text$)
  If bytes&>0
     Dim bereich#,bytes&
     ReadFileQuick(addr(text$),bereich#,0,bytes&)
     CsvToListview(lv3&,bereich#,bytes&,1) '1. Einfügen
     CsvToListview(lv3&,bereich#,bytes&,1) '2. Einfügen
     Dispose bereich#
  EndIf

while 1
  waitinput
  case %key = 2: BREAK
endwhile

freedll lvdll& 'listview.dll entladen
'$I Listview_Dispose.inc '
dispose bereich# 'speicherbereich freigeben
end
Lösch später einfach die *.csv .

Gruß Thomas

Geändert von THFR (28.09.2010 um 13:28 Uhr)
THFR ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 28.09.2010, 14:08   #11 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

keine schlechte Idee, Thomas wenn ich das jetzt richtig verstanden habe, könnte ich den Umweg mit WriteFileQuick/ReadFileQuick weglassen & nur mit ListviewToCsv/CsvToListview hantieren. Das würde zur Laufzeit sonst zu lange dauern, weil in der Praxis dieser Vorgang ca. 200x ausgeführt wird & die Quell-LV so zwischen 50-2000 Einträge enthalten & auch mehrere Spalten haben. Ich probe das mal - wenn das funzt, hat in der Tat die Funktion ListviewToRaw/RawToListview eine Make (obwohl ich glaube, daß die RAW-Idee bestimmt flinker arbeitet als die CSV-Geschichte, kann Frank sicherlich genauer beurteilen)
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 28.09.2010, 15:04   #12 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Bei mir gehts
Code:
    x&=GetNeededMemory(lv1&,1)
    Dim bereich#,x&
    x&=ListviewToCsv(lv1&,bereich#,0,0)
    CsvToListview(lv3&,bereich#,x&,1) '1. Einfügen
    CsvToListview(lv3&,bereich#,x&,1) '2. Einfügen
    Dispose bereich#
'
Gruß Thomas
THFR ist offline   Mit Zitat antworten
Alt 28.09.2010, 17:43   #13 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Zitat:
Bei mir gehts
Jo! Bei mir auch , ich mußte nur immer neu dimensionieren, weil die SQL-Abrage ja immer unterschiedliche Datenmengen liefert:
Code:
whileloop 200
          clearlistview(lv1&) 'lv1 leermachen (sonst gibs kuddelmuddel!)
          sql$ = "hier wird jeweils die passende sql-Abfrage zusammengebaut"
          LVSQL sql$,lv1& 'sql-abfrage ins lv1 packen
          x&=GetNeededMemory(lv1&,1)
          Dim bereich#,x&
          x&=ListviewToCsv(lv1&,bereich#,0,0)
          CsvToListview(lv3&,bereich#,x&,1) ' Einfügen
          dispose bereich# 
endwhile
Ist jedenfalls ein großer Fortschritt Im Grunde das gleiche Prinzip, wie mit RAW - ob es grundlegende Unterschiede gibt & warum dies nicht so funzt werden wir ja bald von Frank erfahren
Vielen Dank für die Hilfe!
Ist die LV.dll-Version 2112 jetzt eigentlich die aktuelle?
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 28.09.2010, 19:40   #14 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Müßte die letzte Version sein. Beachte aber, ich glaube Frank hat die nur ab XProan 10 getestet. Ältere Versionen habe ich sonst noch liegen. Ferner würde ich prüfen ob x&>0 ist. Kann sonst vielleicht zum Abbruch führen.
Einfach mal testen.

Gruß Thomas
THFR ist offline   Mit Zitat antworten
Alt 28.09.2010, 21:18   #15 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Zitat:
obwohl ich glaube, daß die RAW-Idee bestimmt flinker arbeitet als die CSV-Geschichte, kann Frank sicherlich genauer beurteilen)
Müsste beides gleich schnell arbeiten. Raw ist nur ein leicht abgewandeltes Format von Csv. Nur der Assemblerteil würde eh in 0 ms abgearbeitet, selbst für riesige Datenmengen. Bremsen tut natürlich das Lesen/Schreiben im Listview, für dass ich auf Messages zugreifen mußte.

Ok, ich schau mir die Raw-Funktionen mal kritisch an, sobald ich Luft habe. Vorerst scheinst du ja eine Lösung gefunden zu haben. Hab momentan leider sehr wenig Zeit.

Stimmt, die aktuelle Version ist 2112.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Excel - Makro um Zeilen in andere Sheets zu kopieren Mauli Office-Anwendungen 13 11.05.2009 16:22
Daten in eine zweite Tabelle schreiben. Pat-Man Office-Anwendungen 3 10.02.2007 10:57
Datensätze in der gleichen Tabelle kopieren dave21 PHP/MySQL 6 04.05.2005 16:13
Treiber auf andere Festplatte kopieren ? u0012 Hardware - Problemlösungen 5 27.07.2004 17:49



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:11 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2