| |
Anzeigen |
|
|
Social Bookmark Script |
|
|
| Zeige Beiträge 1 bis 20 von 37 Treffern |
Seiten (2): [1] 2 nächste » |
Thema: cDBCjGrid Klasse Irritation |
|
|
Hallo Mika,
das ist ein Ding, dass ich darauf nicht gekommen bin. Ich werde das testen, momentan stehen schon wieder andere Dinge an. Kurios, aber logisch allerdings das Verhalten einer cGrid und einer "alten Grid" in einer View: beim Filtern und aktualisieren mit dem Refresh_page wird auch die neue cGrid sofort auf den richtigen Record gesetzt....
Danke nochmals für´s Auf- die- Sprünge- helfen.
Andreas
|
|
Thema: Konvertierungsfehler beim MSSQL.Save |
|
|
Hallo Leute, wieder mal ein schwieriger Fall. Mein DB- Ableich von einer lokalen DB zu einer struktuerell identischen MSSQL- Tabelle läuft so, dass der entsprechende Datensatz gefunden und durch die Inhalte des DB- Satzes (die in einem VariantArray stehen) ersetzt wird. Dieser Prozess läuft in einer For loop Schleife, bis alle Felder gefüllt sind und dann wird gespeichert. Was nicht (oder mit Meldung eines Konvertierungsfehlers) übertragen wird, sind Datumswerte! Werden sie dagegen nach Ende der Loop- Schleife gesetzt, funktioniert alles normal. Folgendes Procedere läuft problemlos:
Clear hTable
Set_Field_Value hTable 1 to vDBDataflexArtikel[1]
Vfind hTable 1 EQ
If (Found) Begin
For iFeldNr from 1 to iFelderGesamt
If (iType[iFeldNr] = DF_ASCII) Set_Field_Value hTable iFeldNr to (trim(vDBDataflexArtikel[iFeldNr]))
If (iType[iFeldNr] = DF_BCD) Set_Field_Value hTable iFeldNr to vDBDataflexArtikel[iFeldNr]
Loop
Set_Field_Value hTable 26 to vDBDataflexArtikel[26]
SaveRecord hTable
Unlock
Sobald aber in der Loop- Schleife die Zeile für die DatumsKonvertierung des ArrayWertes drin ist, und dann das Set_field_value nach dem loop natürlich raus ist,
If (iType[iFeldNr] = DF_DATE) Set_Field_Value hTable iFeldNr to (convert(vDBDataflexArtikel[iFeldNr],Date))
wird entweder der Wert nicht übertragen oder der MSSQL.Save ergibt den Konvertierungsfehler. Es ist egal, ob hier ein Date oder ein Datetime und die entsprechende Konvertierung verwendet wird. DateTime ergibt immer diesen Fehler, obwohl SQL DateTime- Felder besitzt.
Da komme ich nicht mehr weiter. Zumal vor einiger Zeit das noch zu funktionieren schien, denn die Werte der beiden Tabellen stimmten damals.
Hoffe, es kann da jemand helfen.
Gruß
Andreas
|
|
Thema: cDBCjGrid Klasse Irritation |
|
|
Hallo an alle,
habe irgendwie gerade ein Problem mit dieser Klasse. In der alten List- Klasse sende ich bei Aktivierung eines Filters nach dem Rebuild_constraint ein refresh_page an die list (oder Grid). Bei der neuen Klasse ergibt das logischerweise einen Fehler, weil diese Methode nicht existiert. Hier ist es die RefreshDataFromDD. Aber das generiert sofort einen Fehler. Was mache ich hier falsch? Auch ist meiner Meinung nach die Doku zur neuen Gridklasse etwas dünn geraten.
Kann mir jemand aus der "Patsche" helfen?
Gruß
Andreas
|
|
Thema: Define zzz for integet |
|
|
Hallo Roman,
ich hab bisher nicht viel mit ActiveX UND DF zu tun gehabt, allerdings setze ich in meinen Anwendungen viele Glob´s ein, man muß zwar die Übersicht behalten, aber es geht recht komfortabel.
Habe auch noch nie von "Anti"- Define was gehört...
Gruß
Andreas
|
|
Thema: Define zzz for integet |
|
|
..ich würde mit einer glob. variablen arbeiten, die, sobald sie 0 erhält eine weitere glob. variable auf gewünschte Werte setzt...hab´s aber nicht probiert, war nur mein erster Gedanke.
Gruß
Andreas
|
|
Thema: Problem Verwendung *.int Datei |
|
|
Vielen, vielen Dank Matthias, das ist eine elegante Lösung...aber verstehen kann ich dieses unterschiedliche Verhalten nicht. Ist das ein MSSQL- Treiber- Problem? Was wird eigentlich während der Laufzeit in der cch- Datei abgelegt? Die wird doch jedesmal neu geschrieben.
Gruß
Andreas
|
|
Thema: Suchen außerhalb des Indexes |
|
|
Hallo,
- in der View eine globale Variable anlegen:
Property string psText public ""
in der Tabellenanansicht (macht sich besser, weil dort alle Datensätze zeilenweise angezeigt werden) ein oForm- Objekt anlegen, dann der Einfachheit halber einen Button daneben anlegen, dem man bei Klick folgendes tun läßt:
Procedure OnClick
string strText
get value of oForm to strText
set psText to strText
send Filter
End_Procedure
in der View diese Prozedure anlegen:
Procedure Filter
Send Rebuild_Constraints of xxx_DD
Send refresh_page of oListe fill_from_bottom
End_Procedure
im DD- Objekt diese OnConstrain Prozedur anlegen:
Procedure OnConstrain
String strText
Forward Send OnConstrain
Get psText to strText
If (strText>"") Constrain File.field contains strText
Else Constrain file.field ne strText
End_Procedure
und zu guter letzt muß man dafür sorgen, dass der Filter auch wieder ausgeschaltet wird, bsp. mit einem Button (
Procedure OnClick
set psText to ""
send Filter
End_Procedure
Man kann natürlich auch Constrain_set´s anlegen und hier auch die einzelnen wieder löschen (Constrain_set delete), ist auch deutlich komfortabler, aber in der oben beschriebenen einfachen un schnellen Variante gehts auch.
|
|
Thema: OnConstrain/ Filter |
|
|
Hallo,
- in der View eine globale Variable anlegen:
Property string psText public ""
in der Tabellenanansicht (macht sich besser, weil dort alle Datensätze zeilenweise angezeigt werden) ein oForm- Objekt anlegen, dann der Einfachheit halber einen Button daneben anlegen, dem man bei Klick folgendes tun läßt:
Procedure OnClick
string strText
get value of oForm to strText
set psText to strText
send Filter
End_Procedure
in der View diese Prozedure anlegen:
Procedure Filter
Send Rebuild_Constraints of xxx_DD
Send refresh_page of oListe fill_from_bottom
End_Procedure
im DD- Objekt diese OnConstrain Prozedur anlegen:
Procedure OnConstrain
String strText
Forward Send OnConstrain
Get psText to strText
If (strText>"") Constrain File.field contains strText
Else Constrain file.field ne strText
End_Procedure
und zu guter letzt muß man dafür sorgen, dass der Filter auch wieder ausgeschaltet wird, bsp. mit einem Button (
Procedure OnClick
set psText to ""
send Filter
End_Procedure
Man kann natürlich auch Constrain_set´s anlegen und hier auch die einzelnen wieder löschen (Constrain_set delete), ist auch deutlich komfortabler, aber in der oben beschriebenen einfachen un schnellen Variante gehts auch.
|
|
Thema: Suchen außerhalb des Indexes |
|
|
Hallo,
ich habe bei mir in der DB eine Art "Voll"textSuche integriert, um Artikeltexte oder eben Schnipsel zu finden. Hierbei wird der Suchstring in einer OnConstrain- Procedure mit dem "matches" bzw. mit dem "contains" Operator verknüpft, frei nach dem Muster:
suchstring matches Spaltenwert bzw. suchstring contains Spaltenwert
Diese Filter finden in einer List der View statt, und beim Navigieren durch die List (nachdem der Filter angewendet wurde) aktualisiert sich die View dahinter mit dem entsprechenden Datensatz.
Ist zwar nicht der goldene Weg, aber für meine Zwecke mehr als ausreichend.
Man könnte natürlich auch alle relevanten Spalten der Sätze nacheinander durchsuchen und passende in einer Liste aufzeigen lassen....per PulldownFeld, das die relevanten Feldnamen enthält und einem Suchfeld, das den Suchstring aufnimmt + Button zum Start der Suche.
Man kann das ziemlich komfortabel ausstatten...
Gruß
Andreas
|
|
Thema: Problem Verwendung *.int Datei |
|
|
Hallo SQL- Spezies, folgendes Problem:
Wir brauchen während der Programmlaufzeit die Möglichkeit der Umschaltung auf verschiedene Databases auf dem SQL- Server. In der *.int- Datei ist der DatabaseName statisch eingetragen, und während der Laufzeit nicht änderbar.
Eine zweite und dynamische Möglichkeit wäre das Öffnen einer Tabelle in verschiedenen DataBases mit folgendem Code:
open "MSSQLDRV:dbo#tbl_artikel@SERVER=xxx;UID=xxx;PWD=xxx;DATABASE=XXX"
bzw. mit
open "MSSQLDRV:dbo#tbl_artikel@SERVER=xxx;UID=xxx;PWD=xxx;DATABASE=YYY"
Wenn aber die Tabellen einen PrimärIndex verwenden, lassen sich aus dem Dataflex heraus in diese Spalte mit dem PrimärIndex per "Set_field_value File Field Variable" keine Werte eintragen! Alle anderen Felder werden beschrieben, aber der Save- Vorgang bringt einen Fehler, dass NULL- Werte im PrimärFeld nicht eingetragen werden können. Bei genauerer Beobachtung des Servers werden aber für dieses Feld keine Daten angenommen und somit ist das für den SQL- Server NULL.
Verwendet man hingegen die Variante open tabelle , deren *.int- Datei in der filelist ist, dann funktioniert alles reibungslos.
Hat hierzu jemand eine Idee? Ist das eine Treiber- Problem? Auch das Hinzufügen folgenden Segments nach dem Wert DATABASE in obigem Code brachte keinen Erfolg: ";RECNUM_TABLE=NO;PRIMARY_INDEX=1"
Gruß
Andreas
|
|
Thema: Zugriff auf MSSQL |
|
|
Hallo an alle,
folgendes Problem: Beim Connect zur MSSQL DB werden Textfelder der SQL Tabelle, die als Feldlänge "max" drin haben, mit einer DF- Feldlänge von 0 angegeben. Und es erscheinen natürlich dann auch keine Werte! Wie kann ich das Problem lösen? Andere Felder mit für DF überlangen Feldlängen funktionieren dennoch...
verwendeter Treiber MSSQL 5.1.0.69, verwendete DF 15.1
Gruß
Andreas
P.S. Noch ein Hinweis: bei unserem alten Programm, geschrieben mit VDF11 und MSSQL 4.1.0.10 existiert die gleiche DB- Anbindung zum SQL- Server, und funktioniert ohne Probleme. Und ist viel schneller (mind. Faktor 10) beim Connect... Irgendwas läuft bei diesem MSSQL Treiber daneben...
|
|
Thema: dynamische, benutzerabhängige Filter |
|
|
Hallo Roman, hallo Matthias,
DANKE für diese Tipps! Zu Roman´s Tip: Ich arbeite bereits mit Propertys, allerdings nur in der Listenansicht, weil der Filter nur in dieser Ansicht Sinn macht. Desweiteren habe ich aber das Problem, dass der Benutzer während der Laufzeit das Filterfeld von bsp.weise ArtikelNr auf LID oder ein anderes der restlichen 30 Felder setzen kann. Aber dem Constrain kann ich keine Variable File.field übergeben. Somit müßte ich bsp.weise 30 constrains setzen, die je nachdem, ob das dazugehörige Feld in der Combobox ausgewählt ist und der (vom Benutzer eingegebene) Suchwert gültig ist, und dann den RebuildConstrain ausführen. Das ist eine Menge Schreibarbeit. Beim SQL gibt es da eine einfachere Möglichkeit, immer tiefer, nach unterschiedlichen Feldwerten und mit unterschiedlichen Operatoren verschiedener Felder zu filtern. Hinzu kommt ja die Auswahl gt eq und lt, bzw. between und matches. So hätte ich das gerne....
Zu Matthias´ Tip: Das werde ich jetzt mal probieren und gebe Signal, was daraus geworden ist
Derzeit sieht das Ganze bei mir so aus:
Procedure OnConstrain
Integer iAktiv iLid iComboItem1
String strFeldName
Number nWert
Forward Send OnConstrain
Get piAktiv to iAktiv
Get Value of oCF1 to strFeldName
Get Value of oNumWert to nWert
Get piPosCF1 to iComboItem1
If (iAktiv<2) Constrain artikel.Aktiv eq iAktiv //alle aktiven Artikel
If (iAktiv=2) Constrain artikel.aktiv lt iAktiv //alle Artikel
If (iAktiv=3) Begin //alle Artikel und in Bearbeitung
Constrain artikel.aktiv lt iAktiv
Constrain Artikel as (Artikel.inbearbeitung=1)
End
Case Begin
Case ((strFeldName="LID") and (nWert>0))
If (iComboItem1=0) Constrain Artikel.LID eq nWert
If (iComboItem1=1) Constrain Artikel.LID gt nWert
If (iComboItem1=2) Constrain Artikel.LID lt nWert
Case Break
Case ((strFeldName="WG") and (nWert>0))
If (iComboItem1=0) Constrain Artikel.WG eq nWert
If (iComboItem1=1) Constrain Artikel.WG gt nWert
If (iComboItem1=2) Constrain Artikel.WG lt nWert
Case Break
Case End
End_Procedure
|
|
Thema: dynamische, benutzerabhängige Filter |
|
|
Hallo an alle,
Problem: es sollen Filter in einer Artikeltabelle gesetzt werden, bei denen der Benutzer das zu filternde Feld selbst aus der Feldliste auswählt und in eine Form den Filterwert einträgt. Nun kann zwar das zu filternde Feld und der Filterwert an das DD übergeben werden, aber das constrain akzeptiert nur die Regel File.field. Die Variante mit der Bar |FN2,23 funktioniert zwar, aber ändert nichts an der Tatsache, dass während der Laufzeit nicht klar ist, welches Feld der Benutzer auswählt und es demzufolge als Variable übergeben werden muß.
Ich habe gerade keine Idee mehr!
Gibt es hier eine andere Möglichkeit? Habe mal ein Bildchen zum besseren Verständnis angehängt.
Gruß
Andreas
|
|
Thema: Convert DateTime |
|
|
Hallo an alle,
folgendes Problem: Wir benötigen einen TimeStamp im Vergleich mit SQL- DB´s. Da VDF keine solchen Felder ermöglicht, arbeiten und vergleichen wir mit (in numerisch) konvertierten TimeStamps, die eine 12 stellige Zahl ergeben, die allerdings in 2 Stufen erstellt werden, nämlich Datum und Zeit separat und dann als Num- Wert erfasst werden, weil bei der Konvertierung der gesamten DateTime- Variable nur der Datumswert übergeben wird und die Time-Portion fehlt. Allerdings ist bei diesem entstandenen Wert die RückKonvertierung nicht möglich, Fehler ungültige Konvertierung erscheint. Weder convert noch cast liefern ein fehlerfreies Ergebnis. Hat jemand eine Idee, wie ich aus vollständigen TimeStamps (also Datetime- Variable) in DF speicherbare, aber eben auch wieder als realen TimeStamp umwandelbare Werte erstelle? Also TimeStamp -> numerisch und wieder (fehlerfrei) zurück?
Gruß
Andreas
|
|
Thema: MSSQL- Zugriff fehlerhaft |
exli2
| Antworten: |
12 |
| Hits: |
1.725 |
|
|
13.08.2010 10:36 |
Forum: MS-SQL |
Hallo Matthias,
Danke für diese Tipps!
Was kostet mich die VDF- Lizenz+neuem Reportgenerator und was ohne Reportgenerator? Wir werden wahrscheinlich noch in diesem Jahr das Programm kommerziell nutzen wollen und müssen...und werden entscheiden müssen, ob wir CR9 weiterverwenden( habe ja vor kurzem erst die Lizenz gekauft).
Gruß
Andreas
|
|
Thema: MSSQL- Zugriff fehlerhaft |
exli2
| Antworten: |
12 |
| Hits: |
1.725 |
|
|
06.07.2010 19:58 |
Forum: MS-SQL |
Hallo Matthias und alle anderen,
wir denken, den Fehler gefunden zu haben! Hier kommen zwei Dinge zum Tragen, die Auslöser für das genannte Problem sind. Trotz bestehender und mit hohem Downstream versehener Netzverbindung haben wir zum (im www stehenden) Server größtenteils ping- Zeiten von deutlich über 350ms, von anderen Internetanschlüssen zur gleichen Zeit aber ping- Zeiten unter 30ms. Hinzu kommt (nicht unbeträchtlich beteiligt) der im MSSQL- Treiber Version 5 durchlaufende Test der ASCII- Zeichen, was offenbar zur Einstellung oder Synchronisation des Zeichensatzes dient. Und jedes Mal, wenn beispielsweise ein Open oder Save gesendet wird, kommt dieser Durchlauf. Ob sich da was ändern läßt oder geändert wird (in der Version 4 des MSSQL Treiber gab es das in dieser Form nicht) können nur die Macher beantworten. Bei langsamen (bzw. ping- lahmen) und entfernt stehenden Servern ist das zumindest enorm behindernd.
Eine Frage trat dennoch auf. Wie kann unter VDF während der Laufzeit die Verbindung zum Server getestet werden? Bei der Erstellung einer DSN im ODBC- Manager ist ja sowas am Ende auch möglich. Vielleicht weiß das jemand?
Gruß
Andreas
|
|
Thema: MSSQL- Zugriff fehlerhaft |
exli2
| Antworten: |
12 |
| Hits: |
1.725 |
|
|
28.06.2010 17:27 |
Forum: MS-SQL |
Hallo Matthias,
die Empfehlung habe ich nicht vergessen, aber es kam mir ja darauf an, VDF15 (auch unter Win7) nutzen zu können, da erst bei dieser Version die TimeStamps der SQL- DB gelesen werden können. Und mir ist das so unterschiedliche Verhalten unerklärlich. Auch deswegen haben wir verschiedene Rechner mit verschiedenen Betriebssystemen ausgestattet, um den Fehler einzukreisen. Da es hier in Deutschland leider viel zu wenige DF- Programmierer gibt, die sich auch noch im Bereich SQL und deren Treiber auskennen, führt jeder (scheinbare) Fehler zu einem immensen Lernprozess, der wiederum von der eigentlichen Problemlösung und dem Projekt ablenkt. Übrigens, an VDF15 könnte ich mich nach längerer Einarbeitungsphase doch gewöhnen. Es gibt deutliche Vorteile...aber eben auch Nachteile.
Vielleicht wäre es sinnvoll, wir würden mal telefonieren. Ich versuche es am 29.06. so gegen 11Uhr...
Gruß
Andreas
|
|
Thema: MSSQL- Zugriff fehlerhaft |
exli2
| Antworten: |
12 |
| Hits: |
1.725 |
|
|
25.06.2010 16:52 |
Forum: MS-SQL |
Vielen Dank erstmal für das Engagement.
- VDF11 und MSSQL CK 4.1.0.10
- VDF15 Personal und MSSQL CK 5.1.0.65
- VirenCheck auf 2 Systemen (XP und Win7 prof) Microsoft Security Essentials, auf einem Win7 System ohne VirenCheck
- ODBC Zugriffe über Access oder Excel auf allen Systemen perfekt
Der Server ist im www. Ich habe jetzt mal versucht, das Problem nochmehr einzukreisen, nachdem wir die ganze Konstellation von einem anderen Internet- Anschluß aus getestet haben, um Fehler in der Datenverbindung auszuschließen. Es ergibt sich bei dem nachfolgenden Code folgendes Bild unter XP:
VDF11 und VDF15 funktionieren mit diesem Code in einem cSQLHandleManager hervorrragend:
Send SQLSetConnect of hSQL "MSSQLDRV" "SERVER=212.227.55.147;DATABASE=leer;Trusted_Connection=no;UID=xxxxxx;PWD=x
xxxxxx"
VDF11 läuft mit dieser Version hervorragend ohne cSQLHandleManager, bei VDF15 ca. 10-20sek Wartezeit (und eigenartige Select- Anweisungen auf dem Server) :
Login "SERVER=212.227.55.147;DATABASE=leer;Trusted_Connection=no" "xxxxxx" "xxxxxx" "MSSQLDRV"
Unter Win7 beträgt die Wartezeit bei VDF11 mit beiden Varianten kaum eine halbe Sekunde, bei VDF15 ohne den cSQLHandleManager beträgt die Wartezeit im besten Fall 20sek und wieder mit den schon genannten Select- Anweisungen auf dem Server.
Es sieht teilweise so aus, als würde mit einem Select der komplette Zeichensatz durchlaufen...
Das ist alles sehr unerklärlich. Ich bin sehr interessiert daran, dass VDF15 (auch auf Win7) läuft, weil ich hier die so dringend benötigten TimeStamps der SQL auslesen kann, was bei der VDF11 ja leider nicht geht.
|
|
|
| Zeige Beiträge 1 bis 20 von 37 Treffern |
Seiten (2): [1] 2 nächste » |
|