Array :weiᅵ ich so nicht
into Cursor ist genau das Mittel um das Browserfenster zu verhindern.
Lies mal die Hilfe, steht eigentlich ausreichend viel drin dazu
Und zwar unter:
How to: Choose the Type of Data for a List or Combo Box
> 3) gleich noch ne Frage nebenbei: Was ist eigentlich genau der
> Unterschied zwischen RowSourceType=2 und RowSourceType=6?
Aus der Hilfe:
You can populate a list box or combo box with values from fields from a
single table. Unlike when RowSourceType is set to 2 (Table alias),
setting RowSourceType to 6 (Fields) makes it possible to display fields
independent of their actual positions in the table.
hth ein biᅵchen
Horst
Was bei Rowsourcetype letztlich die angebundenen Daten ausmacht ist der
Cursor, insofern ist INTO ARRAY logischerweise ein Griff ins Klo. ICh denke
mal die Combobox greift sich dann statt dem Array aben die Originaltabelle,
die ja dann in der aktiven Workarea offen ist. Ich w�rde typischerweise auf
RoswourceType SQL verzichten und lieber selber den Cursor erstellen und dann
Rowsourcetype 2 oder 6 verwenden. Du solltest auch unbedingt einen
sprechenden Cursornamen verwenden, der sich auf diese Combobox beschr�nkt,
wenn Du immer INTO CURSOR X selektierst scheiterst Du sp�testens bei 2
List-/Comboboxen.
Tsch��, Olaf.
die Combobox zeigt immer dann ein leeres DisplayValue an, wenn es das
Value nicht in der RowSource findet. Vielleicht ist das Dein Problem?
Modifizierst Du innerhalb oder auᅵerhalb der Cbo das Value bzw. die
ControlSource? Oder spielen Dir Leerzeichen vielleicht ein Streich?
Dein Problem hᅵrt sich fᅵr mich jedenfalls so an. Insbesondere, daᅵ Du
Deinen Wert noch im Valid kontrollieren kannst. Danach stellt die Cbo
nᅵmlich fest, daᅵ das Value nicht so valide ist und weiᅵ nicht, welches
DisplayValue herhalten soll. Es kann also den Namen nicht zur AgencyNo
finden.
Hoffe das hilft!
soweit,
ari
Winfried Wolf wrote:
> Zur Combobox hab ich mal ein paar Fragen..
>
> Mein hᅵufigster Gebrauchsfall ist die Auswahl eines Namens aus einer
> Tabelle, zu der ich aber den numerischen Schlᅵssel in der ControlSource
> haben will. Wenn ich das so mache, funktioniert es wie ich will:
>
> AgencyNo=0
> ADD OBJECT ValAgency AS ComboBox WITH;
> BoundTo=.T.,;
> ColumnCount=2,;
> ColumnWidths="150,0",;
> ControlSource="ThisForm.AgencyNo",;
> RowSourceType=3,;
> RowSource="SELECT Name,KeyNo FROM agency ORDER BY 1 INTO CURSOR X",;
> BoundColumn=2
>
>
> 1) Wenn ich "INTO CURSOR X" weglasse, bekomme ich immer ein
> Browserfenster bei der Initialisierung. Lᅵsst sich das irgendwie anders
> vermeiden? Bei Verwendung von "INTO ARRAY laX" werden falsche Felder
> verwendet. Wieso?
>
> 2) Eigentlich ist in meiner Tabelle agency schon alles vorhanden und sie
> lᅵsst sich auch nach name sortieren. verwende ich aber:
>
> RowSourceType=2,;
> RowSource="agency.name,KeyNo"
>
> oder
>
> RowSourceType=6,;
> RowSource="agency.name,KeyNo"
>
> so steht zwar das richtige in der ControlSource, aber mein Eintrag ist
> unsichtbar. Halte ich das Programm im Valid-Event an, kann ich sehen,
> dass der Eintrag da noch sichtbar ist und erst danach blank wird.
> Wieso?
>
> 3) gleich noch ne Frage nebenbei: Was ist eigentlich genau der
> Unterschied zwischen RowSourceType=2 und RowSourceType=6?
>
>
> Gruᅵ,
> WiWo
ehrlich gesagt, ist mir das auch ein Rᅵtsel. Es hᅵngt wohl an der
(Un-)Typisierung von VFP. Nunja, der Typisierung kann man auf vielerlei
Art aus dem Weg gehen. Lᅵst das eigentliche Problem aber nicht.
Vielleicht kᅵnnen die alten Haudegen dazu was sagen?
Hier mal zwei Mᅵglichkeiten:
Variante 1)
LOCAL oForm
CREATE CURSOR MyTable (cname c(20),nindex integer)
INSERT INTO MyTable VALUES('Hamburg',1)
INSERT INTO MyTable VALUES('Mᅵnchen',2)
INSERT INTO MyTable VALUES('Bremen',3)
oForm=CREATEOBJECT("MyForm")
oForm.Show(1)
RETURN
DEFINE CLASS MyForm AS Form
Width=200
Height=120
WindowType=1
nIndex=0
ADD OBJECT MyCombo AS ComboBox WITH;
Top=10,Left=10,Width=100,;
ControlSource="ThisForm.nIndex",;
RowSourceType=6,;
RowSource="MyTable.cname,nIndex",;
BoundTo=.T.,;
BoundColumn=2
Function MyCombo.Valid
This.Value = Int(This.Value)
EndFunc
ENDDEFINE
Variante 2)
LOCAL oForm
CREATE CURSOR MyTable (cname c(20),nindex Numeric(4,2))
INSERT INTO MyTable VALUES('Hamburg',1)
INSERT INTO MyTable VALUES('Mᅵnchen',2)
INSERT INTO MyTable VALUES('Bremen',3)
oForm=CREATEOBJECT("MyForm")
oForm.Show(1)
RETURN
DEFINE CLASS MyForm AS Form
Width=200
Height=120
WindowType=1
nIndex=0
ADD OBJECT MyCombo AS ComboBox WITH;
Top=10,Left=10,Width=100,;
ControlSource="ThisForm.nIndex",;
RowSourceType=6,;
RowSource="MyTable.cname,nIndex",;
BoundTo=.T.,;
BoundColumn=2
ENDDEFINE
Winfried Wolf wrote:
> Aragorn Rockstroh schrieb:
>> Hi WiWo,
>>
>> die Combobox zeigt immer dann ein leeres DisplayValue an, wenn es das
>> Value nicht in der RowSource findet. Vielleicht ist das Dein Problem?
>> Modifizierst Du innerhalb oder auᅵerhalb der Cbo das Value bzw. die
>> ControlSource? Oder spielen Dir Leerzeichen vielleicht ein Streich?
>> Dein Problem hᅵrt sich fᅵr mich jedenfalls so an. Insbesondere, daᅵ Du
>> Deinen Wert noch im Valid kontrollieren kannst. Danach stellt die Cbo
>> nᅵmlich fest, daᅵ das Value nicht so valide ist und weiᅵ nicht,
>> welches DisplayValue herhalten soll. Es kann also den Namen nicht zur
>> AgencyNo finden.
>>
>> Hoffe das hilft!
>>
>> soweit,
>> ari
>>
> Hallo Ari,
> danke fᅵr die Antwort, aber ich ich mache eigentlich gar nichts
> besonderes und habe noch nie im Zusammenhang mit Rowsourcetype=2 oder 6
> und BoundTo=.T. das Displayvalue angezeigt bekommen, wᅵhrend das bei
> Rowsourcetype=3 immer klappt.
> Was ist denn falsch an folgendem Code:
>
> LOCAL oForm
> CREATE CURSOR MyTable (cname c(20),nindex integer)
> INSERT INTO MyTable VALUES('Hamburg',1)
> INSERT INTO MyTable VALUES('Mᅵnchen',2)
> INSERT INTO MyTable VALUES('Bremen',3)
> oForm=CREATEOBJECT("MyForm")
> oForm.Show(1)
> RETURN
>
> DEFINE CLASS MyForm AS Form
> Width=200
> Height=120
> WindowType=1
> nIndex=0
> ADD OBJECT MyCombo AS ComboBox WITH;
> Top=10,Left=10,Width=100,;
> ControlSource="ThisForm.nIndex",;
> RowSourceType=6,;
> RowSource="MyTable.cname,nIndex",;
> BoundTo=.T.,;
> BoundColumn=2
> ENDDEFINE
>
> Gruᅵ,
> WiWo
Es funktioniert auch, wenn Du die ControlSource weglᅵsst. Oder ein
Tabellen-/Cursorfeld als ControlSource verwendest. Aber das dᅵrften
genauso wenig brauchbare Lᅵsungen (fᅵr Dich) sein, wie die
fehlerbereinigte Variante 2... pardon! Wenn Du RowSourceType=3
verwendest, spielt ein QueryResult die Datenquelle. Wie Du schon
festgestellt hast, mit dem Browse-Window mag dabei wohl keiner Leben.
soweit,
ari
Varinate 2 mit invariantem Dezimalpunkt)
LOCAL oForm
CREATE CURSOR MyTable (cname c(20),nindex Numeric(4,2))
INSERT INTO MyTable VALUES('Hamburg',1)
INSERT INTO MyTable VALUES('Mᅵnchen',2)
INSERT INTO MyTable VALUES('Bremen',3)
oForm=CREATEOBJECT("MyForm")
oForm.Show(1)
RETURN
DEFINE CLASS MyForm AS Form
Width=200
Height=120
WindowType=1
nIndex=0
cPoint=Set("Point")
ADD OBJECT MyCombo AS ComboBox WITH;
Top=10,Left=10,Width=100,;
ControlSource="ThisForm.nIndex",;
RowSourceType=6,;
RowSource="MyTable.cname,nIndex",;
BoundTo=.T.,;
BoundColumn=2
Function Init() As Boolean
Set Point To "."
EndFunc
Function Destroy() As Boolean
Set Point To This.cPoint
EndFunc
ENDDEFINE
Winfried Wolf wrote:
> Hallo Ari,
> danke, mit der Variante 1 klappts bestens (mit der Variante 2 allerdings
> nicht; fehlt da noch was?)
> Seltsam nur, dass es mit Rowsourcetype=3 auch geht, selbst wenn ich das
> gleiche SELECT-Kommando nehme.
> Aber Hauptsache, es geht jetzt..
>
> Gruᅵ,
> WiWo
> Aragorn Rockstroh schrieb: