SELECT localidad FROM localidades WHERE id_provincia=this.Value INTO CURSOR cur_localidad
Thisform.cmbLocalidad.RowSource = "cur_localidad"
Thisform.cmbLocalidad.Requery
Thisform.cmbLocalidad.Refresh
si provincias y localidades son tablas, porque no las relacionas?
* Combo dependiente CREATE CURSOR Provincias (ID_PROVINCIA N (10), PROVINCIA C (12)) INSERT INTO Provincias (Id_provincia, Provincia) VALUES ( 1, 'Buenos Aires') INSERT INTO Provincias (Id_provincia, Provincia) VALUES ( 2, 'La Pampa ') INSERT INTO Provincias (Id_provincia, Provincia) VALUES ( 3, 'Cordoba ') CREATE CURSOR Localidades (ID_LOCALIDAD N (10), ID_PROVINCIA N (10), LOCALIDAD C (22)) INSERT INTO Localidades (Id_localidad, Id_provincia, Localidad) VALUES ( 1, 1, 'Capital Federal (Bue)') INSERT INTO Localidades (Id_localidad, Id_provincia, Localidad) VALUES ( 2, 1, 'Mar del Plata (Bue)') INSERT INTO Localidades (Id_localidad, Id_provincia, Localidad) VALUES ( 3, 1, 'Bahia Blanca (Bue)') INSERT INTO Localidades (Id_localidad, Id_provincia, Localidad) VALUES ( 4, 2, 'Santa Rosa (LP) ') INSERT INTO Localidades (Id_localidad, Id_provincia, Localidad) VALUES ( 5, 3, 'Cordoba (Cba)') INSERT INTO Localidades (Id_localidad, Id_provincia, Localidad) VALUES ( 6, 3, 'Villa Carlos Paz (Cba)') CREATE CURSOR Personas (ID_PERSONA N (10), NOMBRE C (10), ID_PROVINCIA N (10), ID_LOCALIDAD N (10)) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 1, 'Persona #1', 1, 1) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 2, 'Persona #2', 1, 1) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 3, 'Persona #3', 1, 1) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 4, 'Persona #4', 1, 2) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 5, 'Persona #5', 2, 4) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 6, 'Persona #6', 2, 4) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 7, 'Persona #7', 3, 5) INSERT INTO Personas (Id_persona, Nombre, Id_provincia, Id_localidad) VALUES ( 8, 'Persona #8', 3, 6) WITH NEWOBJECT("xForm") .Show(1) ENDWITH RETURN DEFINE CLASS xForm as Form ADD OBJECT txtId_Persona AS TextBox ADD OBJECT txtNombre AS TextBox ADD OBJECT cboId_Provincia AS ComboBox WITH ; RowSourceType = 2, RowSource = "cur_provincia", BoundColumn = 2, BoundTo = .T. * en el select uso SELECT nombre, id ... * vinculo el campo con la columna 2 del SELECT (no visible): BoundColumn = 2 y BoundTo = .T. ADD OBJECT cboId_Localidad AS ComboBox WITH ; RowSourceType = 2, RowSource = "cur_localidad", BoundColumn = 2, BoundTo = .T. ADD OBJECT cmgSkip AS CommandGroup WITH ; RowSourceType = 2, Caption = "Siguiente persona", ButtonCount = 5, AutoSize = .T. * Genero los cursores en el Load para que estén disponibles en el Init PROCEDURE Load GO TOP IN Personas ThisForm.UpdateCursors() ENDPROC * actualizo los cursores usando siempre nombre, id FUNCTION UpdateCursors SELECT provincia, id_provincia FROM provincias INTO CURSOR cur_provincia SELECT localidad, id_localidad FROM localidades WHERE id_provincia==personas.id_provincia INTO CURSOR cur_localidad RETURN PROCEDURE Init LOCAL nY WITH ThisForm nY = 10 FOR EACH oCtrl IN .Controls .CurrentX = 10 .CurrentY = nY sSrc = [Personas.] + SUBSTR(oCtrl.Name, 4) * IF PEMSTATUS(oCtrl, [ControlSource], 5) IF TYPE(sSrc) <> "U" * .Print(PROPER(oCtrl.Name)) oCtrl.ControlSource = sSrc ENDIF oCtrl.Move(10, nY) nY = nY + oCtrl.Height + 10 NEXT .cmgSkip.Buttons(1).Caption = "<<" .cmgSkip.Buttons(2).Caption = "<" .cmgSkip.Buttons(3).Caption = ">" .cmgSkip.Buttons(4).Caption = ">>" .cmgSkip.Buttons(5).Caption = "Salir" .Refresh() ENDWITH ENDPROC PROCEDURE cboId_Provincia.Valid ThisForm.Refresh() ENDPROC PROCEDURE cmgSkip.Click WITH This DO CASE CASE .Value==1 GO TOP IN Personas CASE .Value==2 IF ! BOF("Personas") SKIP -1 IN Personas ENDIF CASE .Value==3 IF RECNO("Personas") < RECCOUNT("Personas") SKIP IN Personas ENDIF CASE .Value==4 GO BOTTOM IN Personas CASE .Value==5 ThisForm.Hide() ENDCASE ThisForm.Refresh() ENDWITH ENDPROC PROCEDURE Refresh ThisForm.UpdateCursors() ENDPROC ENDDEFINE *** |