Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - HK

#11
jeje no de hecho ya la encontre si alguien la neita ps ya sabe pidalo pero lo mando x privado xD

yo a lo que me refiero es por el peso (mb) xD y sobre todo que no la haye x torrent xD
digo la express pesa 98.3mb mientras que la enterprise xD 900mb jeje xD y ps en RS
lo malo esque esta en grigo la express
#12
genial amigo gracias... ::)

entonces me supongo no lo encontrare en el visual

entonces me recomiendas bajarme de una ves la version enterprise o podria empezar con la express y luego pasarme a la emterprise lo digo por que es mucho la diferencia en peso ... (o almenos eso se dice)
#13
hey que tal gracias por tu respuesta  ;D

pero no encuentro el analizador de consultas :S yo instale el visual studio ... ps segun me habian dicho que tenia todo lo necesario para sql server ce :D
lo busque en Sql Server 2005 y Sql Server  CE 2.0
o algo me falto de instalar? :xD

grax

p.d. yo me refiero a sql server ce no se xke creo que tu me hablas del sql server
#14
hey que onda amigos ps resulta que ya estaba haciendo una practica xd en visual  pero y crei que haciendo la tablas en visual se crearia en sql server ce, pero no fue asi :S t ya he buscado y lo unico que he ayado es el codigo .... pero donde va?
fue por eso de que yo lo ponia en visual
donde va? :S
#15
hey que tal amigos pues aqui me encuentro con esta duda
pues resulta que hare una base de datos para un ppc wince 4.2 .net ( es un symbol mc1000) y pues no se mucho del tema
mi pregunta es como uso esa base de datos...:s osea es a puro codigo desde visual ? :xD 

he visto en el aparato que al instalar el sql server ce que hay se llama  :xD query analizer pero la verdad de hay no paso ya llevo varios dias de desvelo por esto  :xD :xD

otra pregunta ya que estoy desde cero con esto de las bases de datos y visual ... que camino me recomendarian ( para mas o menos investigar de como va... )

desde ya gracias  ::)
#16
Desarrollo Web / Re: Recomendando host
8 Julio 2008, 01:50 AM
 alguno gratuito para empezar y luego lanzarme al mundo real?...

alguna recomendacion?
#17
y el otro codigo


fiveWayCenterButtonAssign.java


import litebase.*;
import waba.fx.Font;
import waba.ui.Button;
import waba.ui.ComboBox;
import waba.ui.ControlEvent;
import waba.ui.Event;
import waba.ui.Label;
import waba.ui.Window;
import waba.fx.Color;

/********************************************************************************
*    5-way Center Button Assign
*    ------------------------------------
*    This allows the user to quickly switch to a single field for 1 record only.
*    After the user presses the center toggle button either the species, location
*    or live-dead field switches to the alternate combobox string. After this count the
*    application will switch back to the previous value...rather than the top one
*    in the data array. e.g. If you are counting coho and want to add brown bear,
*    you will want to default back to coho and not sockeye after the count. Given that
*    this is a java window and not a java container, it was a little tricky to refresh
*    it's comboboxes after doing a location or a species edit. When this happens
*    a *new* fiveWayCenterButtonAssign window is created. See ControlEvent.WINDOW_CLOSED:
*    in the gpsDataLogger.java file for details. The logic and conditionals were also
*    slightly convoluted.
*   
*    However, the "Terrain" option does not do the above, when selected it merely causes
*    the joystick button to cause iteration through the terrain listbox. When the last
*    field is arrived at, the next press will take you back to the first field.
*********************************************************************************/

public class fiveWayCenterButtonAssign extends Window {
public static fiveWayCenterButtonAssign instance = new fiveWayCenterButtonAssign();
dataCapture dataCapture;
gpsDataLogger gpsDataLogger;
//locationEdit locationEdit;
Label lblSpecies, lblLocation, lblLive, lblTerrain;
static String szLocation = "";
static String szSpecies = "";
Button btnTerrain, btnExit;
ComboBox cbSpecies, cbLocation, cbLive;
String szHeight, szWidth, szPlatform, szRowId;
String []szLive = {"Live","Carcasses"};
int iSpecies, iLocation, iSpecies5WayFlag;
//private Font bigFont=new Font("SW",Font.PLAIN,72);//Depricated 09/07

private Font bigFont = Font.getFont("SW",true,Font.NORMAL_SIZE);

LitebaseConnection driver = LitebaseConnection.getInstance("AZoe");

int iTmpWidth=this.width;
int iTmpHeight=this.height;

public fiveWayCenterButtonAssign(){
super ("5-Way Control Center Button Assign",ROUND_BORDER);
setRect(CENTER,CENTER,iTmpWidth/32 * 31,iTmpWidth/8 * 5);
setFont(bigFont);
}
public void onStart(){
szWidth = gpsDataLogger.szWidth;
szHeight = gpsDataLogger.szHeight;
szPlatform = gpsDataLogger.szPlatform;

lblSpecies = new Label("Species:");
add (lblSpecies,LEFT+2,TOP+3);

cbSpecies = new ComboBox(gpsDataLogger.szSpeciesLookup);
add(cbSpecies);
cbSpecies.setRect(AFTER+2,SAME,iTmpWidth/8*3,PREFERRED);
cbSpecies.select(0);
cbSpecies.setEnabled(true);


lblLocation = new Label("Location:");
add (lblLocation,LEFT+2,AFTER+2);

cbLocation = new ComboBox(gpsDataLogger.szLocationLookup);
add(cbLocation);
//cbLocation.setRect(iTmpWidth/8*2,AFTER+2,iTmpWidth/8*6-4,PREFERRED);
cbLocation.setRect(AFTER+2,SAME,iTmpWidth/8*5,PREFERRED);
cbLocation.select(0);
cbLocation.setEnabled(true);

lblLocation = new Label("Location:");
add (lblLocation,BEFORE-2,SAME);

cbLive = new ComboBox(szLive);
add(cbLive);
cbLive.setRect(AFTER+2,AFTER+6,50,PREFERRED);
cbLive.select(0);
cbLive.setEnabled(true);

lblLive = new Label("Live:");
add (lblLive,BEFORE-2,SAME);

add(btnTerrain = new Button("Off"),AFTER+2,AFTER+6);
lblTerrain = new Label("Terrain:");
add (lblTerrain,BEFORE-2,SAME);

btnExit = new Button("  Exit  ");
//btnExit.setGap(1); Depricated 09/07
btnExit.commonGap = 6;
add (btnExit,RIGHT-32,BOTTOM-5);}
/**************************************************************************
* Causes the selected control, (Carcase, Location, Species or Terrain) to
* be a purdy green color.
**************************************************************************/
private void SetColor(){
if(gpsDataLogger.iTerrainFlag == 1){
btnTerrain.setText("ON");
btnTerrain.setBackColor(Color.GREEN);
cbSpecies.setBackColor(Color.WHITE);
cbLocation.setBackColor(Color.WHITE);
cbLive.setBackColor(Color.WHITE);}
else if(gpsDataLogger.iSpeciesFlag == 1){
btnTerrain.setText("OFF");
btnTerrain.setBackColor(Color.WHITE);
cbSpecies.setBackColor(Color.GREEN);
cbLocation.setBackColor(Color.WHITE);
cbLive.setBackColor(Color.WHITE);}
else if(gpsDataLogger.iLocationFlag == 1){
btnTerrain.setText("OFF");
btnTerrain.setBackColor(Color.WHITE);
cbSpecies.setBackColor(Color.WHITE);
cbLocation.setBackColor(Color.GREEN);
cbLive.setBackColor(Color.WHITE);}
else if(gpsDataLogger.iCarcassFlag == 1){
btnTerrain.setText("OFF");
btnTerrain.setBackColor(Color.WHITE);
cbSpecies.setBackColor(Color.WHITE);
cbLocation.setBackColor(Color.WHITE);
cbLive.setBackColor(Color.GREEN);}
}

public void onEvent(Event e){
switch (e.type){  
case ControlEvent.PRESSED:
if (e.target == cbSpecies){
gpsDataLogger.iToggleSpecies = cbSpecies.getSelectedIndex();
gpsDataLogger.iSpeciesFlag = 1;
gpsDataLogger.iLocationFlag = 0;
gpsDataLogger.iCarcassFlag = 0;
gpsDataLogger.iTerrainFlag = 0;
SetColor();
repaint();}
else if (e.target == cbLocation){                    
gpsDataLogger.iToggleLocation = cbLocation.getSelectedIndex();
gpsDataLogger.iSpeciesFlag = 0;
gpsDataLogger.iLocationFlag = 1;
gpsDataLogger.iCarcassFlag = 0;
gpsDataLogger.iTerrainFlag = 0;
SetColor();
repaint();}
else if (e.target == cbLive){                    
gpsDataLogger.iToggleLive = cbLive.getSelectedIndex();
gpsDataLogger.iSpeciesFlag = 0;
gpsDataLogger.iLocationFlag = 0;
gpsDataLogger.iCarcassFlag = 1;
gpsDataLogger.iTerrainFlag = 0;
SetColor();
repaint();}

else if (e.target == btnTerrain){                    
gpsDataLogger.iSpeciesFlag = 0;
gpsDataLogger.iLocationFlag = 0;
gpsDataLogger.iCarcassFlag = 0;
gpsDataLogger.iTerrainFlag = 1;
SetColor();
repaint();
}
else if (e.target ==  btnExit){
Exit();}
}
}
public void Exit(){
unpop();}
}



gpsDataLogger.java


//********************************************************************
//***                       gpsDataLogger                          ***
//***                      April 14, 2007                          ***
//***              Copyright Glenn Hollowell 2007                  ***
//***                     glenn@blepsias.net                       ***
//***  **********************************************************  ***
//***  Software is provided "AS IS," without a warranty of any     ***
//***  kind. ALL EXPRESS OR IMPLIED REPRESENTATIONS AND WARRANTIES,***
//***  INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS  ***
//***  FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY    ***
//***  EXCLUDED. THE ENTIRE RISK ARISING OUT OF USING THE SOFTWARE ***
//***  IS ASSUMED BY THE USER. See the GNU General Public License  ***
//***  at www.gnu.org for further details.                         ***
//***  *********************************************************** ***
//***  The application was written using the SuperWaba toolset     ***
//***  developed by Guilherme Hazan and his staff at               ***
//***  Superwaba, Ltd. Superwaba is a proprietary development      ***
//***  environment based in part on the Waba development           ***
//***  environment developed by WabaSoft, Inc.                     ***                       
//********************************************************************                             


import litebase.*;
import waba.sys.*;
import waba.ui.*;
import waba.sys.Convert;
import waba.sys.Time;
import waba.sys.Vm;
import waba.ui.ControlEvent;
import waba.ui.Event;
import waba.ui.Label;
import waba.ui.MainWindow;
import waba.ui.MessageBox;
import waba.fx.Color;
import waba.io.File;
import litebase.LitebaseConnection;
import litebase.ResultSet;

public class gpsDataLogger extends MainWindow{
String szChangeLog = "14Feb2008 |-Installed new NMEA string parser logic| -added Altitude data to tracklog|and to DataCapture tab| -added Terrain listbox, (Ocean-Bay-Stream)|to 5-way button mapping.| -cleaned up GPS tab. Added baud and|ComPort listboxes.| -3/3 added query kill option to Settings| dropdown menu. ";
LitebaseConnection driver;
TabPanel tp;
public dataCapture dataCapture;
public dataEdit dataEdit;
public dataGps dataGps;
public Grid grid;
public locationEdit locationEdit;
public speciesEdit speciesEdit;
public fiveWayCenterButtonAssign fiveWayCenterButtonAssign;
MessageBox mbQueryKill,mbExitApplication,mbCreateMainTableCsvFile,mbCreateTrackLogCsvFile,mbCsvFileCreated,mbPurgeTrackLog,mbPurgeMainTable,mbMainTableDeleted,mbTrackLogTableDeleted,mbAboutGpsDataLogger,mbChangeLog;
private MenuBar mbar;
static String szPlatform = Settings.platform;//gets host device information
//returned strings are "Java", "PalmOS", "Win32", "WindowsCE",or "PocketPC"
static String szWidth = Convert.toString(Settings.screenWidth,1);
static String szHeight = Convert.toString(Settings.screenHeight,1);
static String []szLocationLookup = {""};
static String []szSpeciesLookup = {""};
static String szValid = "";

static String szLat, szLatNs, szLong, szLongEw, szTime, szAltitude;

//static int iPortNumber = 8;
static int iFirstLocationIteration = 0;
static int iFirstSpeciesIteration = 0;
static int iEmptyLocationLookupTable = 0;
static int iEmptySpeciesLookupTable = 0;
static int iTrackLogInterval = 5000;//default setting for tracklog: 1 LatLong every 5 seconds
static int iTrackLogFlag = 0;
static int iQueryKillFlag = 0;//this allows the user to stop species + location querying which gets slow if table is >~1200 records

/********************************************************************************
*    5-way toggle Combobox array values
*    ------------------------------------
*    Note: iOriginalSpecies and iOriginalLocation is the displayed value prior to
*    the user pressing the center toggle button and switching to the alternate
*    iToggleSpecies or iToggleLocation combobox string. This allows the
*    application to switch back to the previous value...rather than the top one
*    in the data array. e.g. If you are counting coho and have selected brown bear
*    as the species toggled to by the joystick for 1 record, you will want to default
*    back to coho and not sockeye after the Brown Bear count.
*********************************************************************************/
static int iOriginalSpecies;
static int iOriginalLocation;
//This is the value for the one time selected value used by the 5-way joystick
static int iToggleSpecies;
static int iToggleLocation;
static int iToggleLive;
/***************************
*   5-way toggle Flags
***************************/
//Is set in menu dropdown, based on which dropdown is selected
static int iCarcassFlag = 1; //sets carcass combobox as default 5-way joystick selection
static int iTerrainFlag;
static int iSpeciesFlag;
static int iLocationFlag;
//Is set when the string to be loaded is the alternate one time string
static int iToggleSpeciesFlag;
static int iToggleLocationFlag;

public gpsDataLogger(){
super("gpsDataLogger, build 021408.1",TAB_ONLY_BORDER);
if (!Settings.onDevice)
waba.applet.JavaBridge.showMsgs = false;
setDoubleBuffer(true);
Settings.setUIStyle(Settings.Flat);
driver = LitebaseConnection.getInstance("AZoe");
String []szLocationLookup;//maybe delete??
String []szSpeciesLookup;//maybe delete??
InterceptSystemKeys();
}
public void onStart(){
if (!verifyDrivers())
return;
CreateMainTable();
CreateTrackLogTable();
CreateLocationLookupTable();
CreateSpeciesLookupTable();
//gps variables to move between containers
szLat = szLatNs = szLong = szLongEw = szTime = "";
//menubar titles and dropdown fields
String col0[] = {"File","Edit Location Table","Edit Species Table","Purge Main Table","Purge TrackLog Table","Make MainTable.csv","Make Tracklog.csv","Exit application"};//first dropdown title and item.
String col1[] = {"Settings","Start/Stop TrackLog","5-Way center button","Stop count query"};//second dropdown title and items.

String col2[] = {"Info","About gpsDataLogger","About SuperWaba VM","DeviceOS, screensize","General Instructions"};//third dropdown title and item.
setMenuBar(mbar = new MenuBar(MenuBar.strings2items(new String[][]{col0,col1,col2})));
//Strings for tab labels, then create tab panels
String []tpCaptions = {"Data Capture","Data Edit","Table","GPS"};
add(tp = new TabPanel(tpCaptions));
tp.setBorderStyle(Window.NO_BORDER);
tp.setRect(getClientRect());
//Grid column headers... Note: Grid setup must be first otherwise grid overlays tp #0. Bug??
String []gridCaptions = {"rowid","Timestamp","Species","Count","Location","Terrain","Latitude","N/S","Longitude","E/W","Sky","Water","Overall","Live"};
//Instantiate tab panels
tp.setPanel(2,grid = new Grid(gridCaptions,false));
tp.setPanel(0,dataCapture = new dataCapture());
tp.setPanel(1,dataEdit = new dataEdit());
tp.setPanel(3,dataGps = new dataGps());

//creates string array from lookup tables, then loads into comboboxes
LoadSpeciesComboBoxStringArray();
LoadLocationComboBoxStringArray();
invalidateRS(); //loads updated grid on grid tab
/*
* locationEdit = locationEdit.instance was up in Public gpsDataLogger,
* but this requires a lookup table. Would get an exception thrown
* if there had not been a lookup table created yet. Check this out
* and delete if not so...
*/
locationEdit = locationEdit.instance;
speciesEdit = speciesEdit.instance;
fiveWayCenterButtonAssign = fiveWayCenterButtonAssign.instance;
//below loads ComboBox correctly when CB is in 0 tab place
dataCapture.updateSpeciesComboBox();
dataCapture.updateLocationComboBox();
dataCapture.cbLocation.repaintNow();
dataCapture.cbSpecies.repaintNow();
dataCapture.ShowSum();
}
public void invalidateRS(){ //refreshes grid to match main data table
ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live,lastUpdated from surveyDB");
//rs.setDecimalPlaces(5,2); //investigate this...
if (rs.first()) // checks to see if rs is new, (empty)
grid.setItems(rs.getStrings(-1,true,false));
else
grid.clear();
rs.close();
}
////////////////////////////Start Main Table methods//////////////////////////////
private void CreateMainTable(){//main data table
try{
driver.execute("create table surveyDB(time_stamp char(16), species char(30), surveycount int, location char(50), terrain char(30), latitude char(16), latns char(2), longitude char(16), longew char (2), sky char(2), water char(2), overall char(2), live char(12), lastUpdated long)");
}
catch (AlreadyCreatedException ace) {}
catch (DriverException pe){
Vm.debug(pe.getMessage());
}
}
private void CreateMainTableIndexes(){
driver.execute("CREATE INDEX IDX_0 ON surveyDB(rowid)"); // the index names are completely ignored
driver.execute("CREATE INDEX IDX_1 ON surveyDB(time_stamp)");
//new MessageBox("Attention","Main Table Indexes May have been created").popupModal();
}
private void PurgeMainTable(){       
driver.executeUpdate("drop table surveyDB");
grid.clear();
}
///////////////End Main Table methods, Start trackLog table methods/////////////////////

private void CreateTrackLogTable(){//table to store Track Log table, (i.e., snail tracks, bread crumbs, etc...
try{
driver.execute("create table trackLog(time_stamp char(16), latitude char(16), latns char(2), longitude char(16), longew char(2), altitude char(5))");
}
catch (AlreadyCreatedException ace) {}
catch (DriverException pe){
Vm.debug(pe.getMessage());
}
}
private void PurgeTrackLogTable(){       
driver.executeUpdate("drop table trackLog");
}
///////////////End trackLog Table methods, Start Location Lookup table methods/////////////////////

private void CreateLocationLookupTable(){ //reference table that comboboxes are populated from.
try{
driver.execute("create table locationLookupDB(location char(50), lastUpdated long)");
driver.execute("CREATE INDEX IDX_0 ON locationLookupDB(rowid)"); // the index names are completely ignored
driver.execute("CREATE INDEX IDX_1 ON locationLookupDB(location)");
}
catch (AlreadyCreatedException ace) {}
catch (DriverException pe){
Vm.debug(pe.getMessage());
}
}
private void CreateLocationLookupTableIndexes(){
driver.execute("CREATE INDEX IDX_0 ON locationLookupDB(rowid)"); // the index names are completely ignored
driver.execute("CREATE INDEX IDX_1 ON locationLookupDB(location)");
new MessageBox("Attention","Location Lookup Table Indexes May have been created").popupModal();
}
///////////////End Location Lookup Table methods...Start Species Lookup table methods//////////////////
/////////////// Start Species Lookup table methods/////////////////////
private void CreateSpeciesLookupTable(){ //reference table that comboboxes are populated from.
try{
driver.execute("create table speciesLookupDB(species char(50), lastUpdated long)");
driver.execute("CREATE INDEX IDX_0 ON speciesLookupDB(rowid)"); // the index names are completely ignored
driver.execute("CREATE INDEX IDX_1 ON speciesLookupDB(species)");
}
catch (AlreadyCreatedException ace) {}
catch (DriverException pe){
Vm.debug(pe.getMessage());
}
}
/*
* Delete this if not needed, other wise fix it.
*/
private void CreateSpeciesLookupTableIndexes(){
driver.execute("CREATE INDEX IDX_0 ON speciesLookupDB(rowid)"); // the index names are completely ignored
driver.execute("CREATE INDEX IDX_1 ON speciesLookupDB(species)");
new MessageBox("Attention","Species Lookup Table Indexes May have been created").popupModal();
}
///////////////////////////End Species Lookup Table methods//////////////////////////////

public boolean LoadLocationComboBoxStringArray(){ //sets initial string length
ResultSet rs = driver.executeQuery("select rowid,location from locationLookupDB");
rs.first();
if (!rs.first()){//checks to see if the lookup table is empty, if so
repaintNow();   //a messagebox is posted to the user
iEmptyLocationLookupTable = 1; //sets flag to be read by datacapture.updateLocationComboBox().
return(true);// Read comments there for explanation.
}
else{//iterates through lookup table and loads string array that populates cbLocation
szLocationLookup[0] = rs.getString("location");
int i = 1;
while (rs.next()){
//make string array dynamic
if (i >= szLocationLookup.length) {
String[] tmp = new String[szLocationLookup.length + 1];
Vm.copyArray(szLocationLookup, 0, tmp, 0, szLocationLookup.length);
szLocationLookup = tmp;
}  
szLocationLookup[i] = rs.getString("location");    
++i;    
}
}
return true;
}   
public boolean LoadSpeciesComboBoxStringArray(){ //sets initial string length
ResultSet rs = driver.executeQuery("select rowid,species from speciesLookupDB");
rs.first();
if (!rs.first()){//checks to see if the lookup table is empty, if so
repaintNow();   //a messagebox is posted to the user
//new MessageBox("Attention","SpeciesLookup Table is empty, | please enter a field.").popupModal();
iEmptySpeciesLookupTable = 1; //sets flag to be read by datacapture.updateSpeciesComboBox().
return(true);// Read comments there for explanation.
}
else{//sets string that populates cbSpecies to rs from lookuptable
szSpeciesLookup[0] = rs.getString("species");
int i = 1;
while (rs.next()){
//make string array dynamic
if (i >= szSpeciesLookup.length) {
String[] tmp = new String[szSpeciesLookup.length + 1];
Vm.copyArray(szSpeciesLookup, 0, tmp, 0, szSpeciesLookup.length);
szSpeciesLookup = tmp;
}  
szSpeciesLookup[i] = rs.getString("species");    
++i;    
}
}
return true;

private boolean verifyDrivers(){
try{
Class.forName("litebase.LitebaseConnection");
}
catch (ClassNotFoundException cnfe){
add(new Label("Please install file|litebase.LitebaseConnection"),CENTER,TOP);
return false;
}
return true;
}
/*********************************************************************************
*      Does carriage return for CSV file creation
**********************************************************************************/
private static byte []enter = {(byte)'\r',(byte)'\n'};
/*********************************************************************************
*           Makes .csv file on the device of the surveyDB data table
**********************************************************************************/
protected void makeCsvFileSurveyDB(){
int iFlag = 0;//sets up header row on first iteration through while loop
String sb = "Time_stamp,Species,Count,Location,Terrain,Latitude,N-S,Longitude,E-W,Sky,Water,Overall,Live,RowId";
String szDateTime; //creates timestamp for the filename
long T = new Time().getTimeLong();
szDateTime = Convert.toString(T,1);  
File f = new File("gpsDataLogger_"+szDateTime+".csv",File.CREATE);//change file name to gpsDataLogger <timestamp>.csv

ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");
rs.first();

int iRowCount = rs.getRowCount();
int i = 0;
while(i <= iRowCount){
if (iFlag !=0){
sb=(rs.getString("time_stamp"));
sb=sb+","+(rs.getString("species"));
sb=sb+","+(rs.getString("surveycount"));
sb=sb+","+(rs.getString("location"));
sb=sb+","+(rs.getString("terrain"));
sb=sb+","+(rs.getString("latitude"));
sb=sb+","+(rs.getString("latns"));
sb=sb+","+(rs.getString("longitude"));
sb=sb+","+(rs.getString("longew"));
sb=sb+","+(rs.getString("sky"));
sb=sb+","+(rs.getString("water"));
sb=sb+","+(rs.getString("overall"));
sb=sb+","+(rs.getString("live"));
sb=sb+","+(rs.getString("rowid"));
rs.next();
}else{
}
byte []buf = sb.getBytes();
f.writeBytes(buf,0,buf.length);
f.writeBytes(enter,0,2);
++i;
iFlag = 1;
} rs.close();      
}

/*********************************************************************************
*           Makes .csv file on the device of the trackLog data table
**********************************************************************************/
protected void makeCsvFileTrackLog(){
int iTrackLogFlag = 0;//sets up header row on first iteration through while loop
String sb = "Time_stamp,Latitude,N-S,Longitude,E-W,Altitude,RowID";
String szDateTime; //creates timestamp for the filename
long T = new Time().getTimeLong();
szDateTime = Convert.toString(T,1);  
File f = new File("trackLog_"+szDateTime+".csv",File.CREATE);

ResultSet rs = driver.executeQuery("select rowid,time_stamp,latitude,latns,longitude,longew,altitude from trackLog");
rs.first();

int iRowCount = rs.getRowCount();
int i = 0;
while(i <= iRowCount){
if (iTrackLogFlag !=0){
sb=(rs.getString("time_stamp"));
sb=sb+","+(rs.getString("latitude"));
sb=sb+","+(rs.getString("latns"));
sb=sb+","+(rs.getString("longitude"));
sb=sb+","+(rs.getString("longew"));
sb=sb+","+(rs.getString("altitude"));
sb=sb+","+(rs.getString("rowid"));
rs.next();
}else{
}
byte []buf = sb.getBytes();
f.writeBytes(buf,0,buf.length);
f.writeBytes(enter,0,2);
++i;
iTrackLogFlag = 1;
} rs.close();      
}
public void InterceptSystemKeys(){
Vm.interceptSystemKeys(Vm.SK_ALL | Vm.SK_LAUNCH);
waba.sys.Vm.interceptSystemKeys(
//WinCE
waba.sys.Vm.SK_HARD1 |
waba.sys.Vm.SK_HARD2 |
waba.sys.Vm.SK_HARD3 |
waba.sys.Vm.SK_HARD4 |
waba.sys.Vm.SK_PAGE_DOWN |
waba.sys.Vm.SK_PAGE_LEFT |
waba.sys.Vm.SK_PAGE_RIGHT |
waba.sys.Vm.SK_PAGE_UP|
//Below is the center 'joystick' of the 5-way control
waba.sys.Vm.SK_ACTION|
//waba.sys.Vm.SK_ENTER|
//additional palmOS silkscreened keys
waba.sys.Vm.SK_SYNC | // Hotsync
waba.sys.Vm.SK_FIND | // Search/Find
waba.sys.Vm.SK_CALC | // Calculator
waba.sys.Vm.SK_LAUNCH);//Home
}
/**
* Five Way Toggle Handling- called when one of the hardware bottons that triggers a
* count is pressed. When iCarcassFlag is 1, neither location nor species strings were
* selected and the default is "Carcass". If either of the other flags are 1, then the
* original value is swapped into the respective field and the flag is reset to "0".
*/

public void FiveWayToggleHandling(){
if (iCarcassFlag == 1){
dataCapture.cbLive.select(0);//switches back to second array field or "Carcass"
dataCapture.ShowSum(); //shows total for "carcass" of that species
iCarcassFlag = 1;}
else if (iToggleSpeciesFlag == 1){
//10/31 //dataCapture.cbSpecies.select(gpsDataLogger.iOriginalSpecies);
dataCapture.cbSpecies.select(iOriginalSpecies);
dataCapture.ShowSum(); //shows total for original species
iToggleSpeciesFlag = 0;}
else if (iToggleLocationFlag == 1){
//10/31 //dataCapture.cbLocation.select(gpsDataLogger.iOriginalLocation);
dataCapture.cbLocation.select(iOriginalLocation);
dataCapture.ShowSum();//shows total for original location
iToggleLocationFlag = 0;}
}
public void onEvent(Event e){
switch (e.type){
/***********************************************************************
* Hardware Button Logic:
* Palm hard buttons are: Calendar(HARD1),Contacts(HARD2),Todo(HARD3),
* MemoPad(HARD4)
* Palm silk screened buttons are: Home(LAUNCH), Dropdown(MENU),
* Hotsync(SYNC),Find(FIND)
*
* 5-way navigation buttons are IKeys.LEFT,RIGHT,PAGE_UP,PAGE_DOWN and ACTION
* WinCE buttons are: HARD1, HARD2, HARD3, HARD4
*
***********************************************************************/
case KeyEvent.KEY_PRESS:
KeyEvent que = (KeyEvent)e;
//5-way navigation buttons: these are the "ring" around the joystick
if (que.key == IKeys.LEFT && tp.getActiveTab() == 0){
dataCapture.PreviousSpecies();break;}
else if (que.key == IKeys.RIGHT && tp.getActiveTab() == 0){
dataCapture.NextSpecies();break;}
else if ((que.key == IKeys.PAGE_UP || que.key == IKeys.UP)&& tp.getActiveTab() == 0){
dataCapture.PreviousLocation();break;}
else if ((que.key == IKeys.PAGE_DOWN ||que.key == IKeys.DOWN )&& tp.getActiveTab() == 0){
dataCapture.NextLocation();break;}
//this is the "joystick" for the 5-way
else if (que.key == IKeys.ACTION && tp.getActiveTab() == 0){
if (iSpeciesFlag == 1){ //flag is set when user selects Location/Species or Live-Dead from dropdown.
if(iToggleSpecies == dataCapture.cbSpecies.getSelectedIndex()){
dataCapture.FiveWayToggle();break;}
else{
iOriginalSpecies = dataCapture.cbSpecies.getSelectedIndex();
dataCapture.FiveWayToggle();}
break;}
else if (iLocationFlag == 1){
if(iToggleLocation == dataCapture.cbLocation.getSelectedIndex()){
dataCapture.FiveWayToggle();break;}
else{iOriginalLocation = dataCapture.cbLocation.getSelectedIndex();
dataCapture.FiveWayToggle();}break;}
else if (iCarcassFlag == 1){
dataCapture.FiveWayToggle();break;}
else if (iTerrainFlag == 1){
dataCapture.FiveWayToggle();break;}
}
/***************************************************************
* End 5-way controls
***************************************************************/
//These are the standard 4 hardware buttons common to Palm and Windows devices
else if (que.key == IKeys.HARD1 && tp.getActiveTab() == 0){//counts 1 sighting
dataCapture.szCount = "1";
dataCapture.Count();
FiveWayToggleHandling();break;}
else if (que.key == IKeys.HARD2 && tp.getActiveTab() == 0){//counts 10 sightings
dataCapture.szCount = "10";
dataCapture.Count();
FiveWayToggleHandling();break;}
else if (que.key == IKeys.HARD3 && tp.getActiveTab() == 0){//counts 100 sightings
dataCapture.szCount = "100";
dataCapture.Count();
FiveWayToggleHandling();break;}
else if (que.key == IKeys.HARD4 && tp.getActiveTab() == 0){//counts 1000 sightings
dataCapture.szCount = "1000";
dataCapture.Count();
FiveWayToggleHandling();break;}

case ControlEvent.WINDOW_CLOSED:
String sel = null;
/*****************************************************************
* This is called from gpsDataLogger Main, so window_close event is
*posted here. Both this window and locationEdit modify the lookup
*tables that the species and location comboboxes are populated from,
*so the windows and containers that show these must then be updated
*accordingly. This is done differently dataCapture and
*fiveWayCenterButtonAssign because one is a java container and the
*other is a java window.
*******************************************************************/
if (e.target == speciesEdit){
dataCapture.updateSpeciesComboBox();
dataCapture.cbSpecies.repaintNow();//break;}
fiveWayCenterButtonAssign = new fiveWayCenterButtonAssign();break;}
else if (e.target == locationEdit){
/**This is called from gpsDataLogger Main, so window_close event
* is posted here. Updates java container dataCapture. See above
* comment also...*/
dataCapture.updateLocationComboBox();
dataCapture.cbLocation.repaintNow();//break;}
/**updates fiveWayCenterButtonAssign java window and it's species combobox*/
fiveWayCenterButtonAssign = new fiveWayCenterButtonAssign();break;}                                              
else if (e.target == mbar){
switch (mbar.getSelectedMenuItem()){
case  -1: break; // no item selected
case   001: //File Menu --> Open location edit popup container
locationEdit.popupBlockingModal();break;  //Settings menu --> locationEdit lookup table edit

case   002: //File Menu --> Open species edit popup container
speciesEdit.popupBlockingModal();break;  //Settings menu --> speciesEdit lookup table edit

case   003: //File Menu --> Purge Main Table
String []szButtonArray = {"Yes","No"};//Settings menu --> purge data table, first WARNING window
mbPurgeMainTable = new MessageBox("Table DELETE WARNING #1","Do you really want to purge | the Main table???", szButtonArray);
mbPurgeMainTable.popupBlockingModal();
int idx = mbPurgeMainTable.getPressedButtonIndex();
if (idx == 0){//Operator chooses 'Yes', goes to second WARNING popup window
String []szButtonArray2 = {"OK","Cancel"};//Settings menu --> purge data table
mbPurgeMainTable = new MessageBox("Table DELETE WARNING #2","This will permanently delete the|ENTIRE set of collected data. ||Make damn sure that this is|what you REALLY want to do.|| Press 'OK' to delete your data,|or 'Cancel' to abort delete.|", szButtonArray2);
mbPurgeMainTable.popupBlockingModal();
int idx2 = mbPurgeMainTable.getPressedButtonIndex();//fetches user choice from second warning, 0 = dump, 1 = cancel.
if (idx2 == 0){//dumps main table, then recreates it
PurgeMainTable();
CreateMainTable();
CreateMainTableIndexes();
invalidateRS();//refresh grid
dataCapture.clear();
switch (tp.getActiveTab()){//below cleans up shown display tab after main table is purged
case 0:break;//dataCapture count fields are cleared by datacapture.clear() above
case 1:dataEdit.clear();break;// dataEdit clears dataEdit tab if that is displayed tab                                    
case 2: break;// grid is displayed tab, refresh will be done by invalidateRS()}
}//show below message for about 3 seconds
mbMainTableDeleted = new MessageBox("Attention","Main data table|has been cleared.",null);
mbMainTableDeleted.popupModal();
waba.sys.Vm.sleep(2000);
mbMainTableDeleted.unpop();
break;}}
else if (idx == 1){}break;//operator has chosen NOT to delete from Delete Warning #1 message box

case   004: //File Menu --> Purge TrackLog Table
String []szClearTrackLogButtonArray = {"Yes","No"};//Settings menu --> purge TrackLog data table, first WARNING window
mbPurgeTrackLog = new MessageBox("Table DELETE WARNING #1","Do you really want to purge | the TrackLog table???", szClearTrackLogButtonArray);
mbPurgeTrackLog.popupBlockingModal();
int idClearTrackLog = mbPurgeTrackLog.getPressedButtonIndex();
if (idClearTrackLog == 0){//Operator chooses 'Yes', goes to second WARNING popup window
String []szClearTrackLogButtonArray2 = {"OK","Cancel"};//Settings menu --> purge data table
mbPurgeTrackLog = new MessageBox("Table DELETE WARNING #2","This will permanently delete the |ENTIRE set of collected TrackLog data.||Make damn sure that this is |what you REALLY want to do.|| Press 'OK' to delete your data,|or 'Cancel' to abort delete.|", szClearTrackLogButtonArray2);
mbPurgeTrackLog.popupBlockingModal();
int idx2 = mbPurgeTrackLog.getPressedButtonIndex();//fetches user choice from second warning, 0 = dump, 1 = cancel.
if (idx2 == 0){//dumps TrackLog table, then recreates it
PurgeTrackLogTable();
CreateTrackLogTable();
mbTrackLogTableDeleted = new MessageBox("Attention","TrackLog data table|has been cleared.",null);
mbTrackLogTableDeleted.popupModal();
waba.sys.Vm.sleep(2000);
mbTrackLogTableDeleted.unpop();
break;}}
else if (idClearTrackLog == 1){}break;//operator has chosen NOT to delete from Delete Warning #1 message box

case   005://File menu --> create MainTable.csv file
String []szCreateMainTableCsvFileButtonArray = {"Yes","No"};
mbCreateMainTableCsvFile = new MessageBox("Attention","Do you really want to create |a .csv copy of the Main table?||This WILL NOT delete the |tables from the PDA. ", szCreateMainTableCsvFileButtonArray);
mbCreateMainTableCsvFile.popupBlockingModal();
int idxMainTableCsvFile = mbCreateMainTableCsvFile.getPressedButtonIndex();
if (idxMainTableCsvFile == 0){//creates csv file on device
makeCsvFileSurveyDB();
//   Little 2 second popup window telling user that job is complete
mbCsvFileCreated = new MessageBox("Attention","A *.csv data file|has been created.",null);
mbCsvFileCreated.popupModal();
waba.sys.Vm.sleep(2000);
mbCsvFileCreated.unpop();
break; }
else{break;} //don't make .csv file, back to application

case   006://File menu --> create TrackLog.csv file
String []szCreateTrackLogCsvFileButtonArray = {"Yes","No"};
mbCreateTrackLogCsvFile = new MessageBox("Attention","Do you really want to create |a .csv copy of the TrackLog table?||This WILL NOT delete the |tables from the PDA. ", szCreateTrackLogCsvFileButtonArray);
mbCreateTrackLogCsvFile.popupBlockingModal();
int idxCsvFile = mbCreateTrackLogCsvFile.getPressedButtonIndex();
if (idxCsvFile == 0){//creates csv file on device
makeCsvFileTrackLog();
//    Little 2 second popup window telling user that job is complete
mbCsvFileCreated = new MessageBox("Attention","A *.csv data file|has been created.",null);
mbCsvFileCreated.popupModal();
waba.sys.Vm.sleep(2000);
mbCsvFileCreated.unpop();
break; }
else{break;} //don't make .csv file, back to application

case   007:// File menu --> Exit selection
String []szExitButtonArray = {"Yes","No"};
mbExitApplication = new MessageBox("Attention","Do you really want to exit|the application?", szExitButtonArray);
mbExitApplication.setUnpopDelay(3000);
mbExitApplication.popupBlockingModal();
int idxExit = mbExitApplication.getPressedButtonIndex();
if (idxExit == 0){//exits application
MainWindow.getMainWindow().exit(0); break; }
else{break;} //don't exit, back to app
/*************************************************************************************************
*   Settings menu: Start-Stop tracklog, 5-way control configuring, database querying stop...
*************************************************************************************************/
case   101: //Settings menu --> Starts trackLog collection, allows user to modify interval
int iTrackLogSeconds = iTrackLogInterval/1000;

String []szTrackLogButtonArray = {"Start","Cancel/Stop"};
InputDialog idTrackLog = new InputDialog("Start TrackLog", " Please enter the desired Track |Log interval in seconds for |Lat/Long coordinates and then |press 'Start'.| The default interval 15 seconds.",Convert.toString(iTrackLogSeconds),szTrackLogButtonArray);                                              
idTrackLog.popupBlockingModal();
int idxTrackLog = idTrackLog.getPressedButtonIndex();
if (idxTrackLog == 0){//starts trackLog()
String szTemp = idTrackLog.getValue();
iTrackLogSeconds = Convert.toInt(szTemp);
iTrackLogInterval = iTrackLogSeconds*1000;//converts seconds to milliseconds
dataEdit.CreateTrackLogTimer();
iTrackLogFlag = 1;//trips On indicator on dataCapture tab
dataCapture.LoadTrackLogIndicator();
break; }
else{ //don't start TrackLog, cancel if running, back to app
dataEdit.removeTimer(dataEdit.trackLogTimer);
iTrackLogFlag = 0;
dataCapture.LoadTrackLogIndicator();
break;}
case 102://Settings menu --> 5-Way center button assign
fiveWayCenterButtonAssign.popupBlockingModal();break; 

case 103://Settings menu --> stop species-location queries
String []szQueryKillArray = {"OFF","ON"};
mbQueryKill = new MessageBox("Attention","Selecting 'OFF' will stop querying|the main table and refreshing|the sum after each count event.|| Choosing 'ON' will turn it back on.||'ON' is the default at startup.", szQueryKillArray);
mbQueryKill.setBackColor(Color.YELLOW);
mbQueryKill.setForeColor(Color.BLACK);
mbQueryKill.setUnpopDelay(10000);
mbQueryKill.popupBlockingModal();
int idxQueryKillExit = mbQueryKill.getPressedButtonIndex();
if (idxQueryKillExit == 0){//Turns table querying OFF
iQueryKillFlag = 1; break; }
else{//Turns table querying ON
iQueryKillFlag = 0; break;} //don't exit, back to app
/********************************************************************************************
* Info menu: About gpsDataLogger, SuperWaba, OS/Device, General Instructions, changelog
********************************************************************************************/

case   201: //about gpsDataLogger, changelog popup
String []szAboutGpsDataLogger = {"Close","Show Change Log"};
mbAboutGpsDataLogger = new MessageBox("About gpsDataLogger","|The purpose of this application|is to allow for recording of|field data with only minimal visual|contact with the PDA device |during data collection. | ", szAboutGpsDataLogger);
mbAboutGpsDataLogger.setUnpopDelay(5000);
mbAboutGpsDataLogger.popupBlockingModal();
int idxAboutGpsDataLogger = mbAboutGpsDataLogger.getPressedButtonIndex();
if (idxAboutGpsDataLogger == 0){//0 = closes popup and return to app
break; }
else if (idxAboutGpsDataLogger == 1){//1 = pops up change log, text is left aligned.
mbChangeLog = new MessageBox("Change Log",szChangeLog);
mbChangeLog.setBackColor(Color.ORANGE);
mbChangeLog.setTextAlignment(2);
mbChangeLog.popupBlockingModal();
break;}
case   202: new MessageBox("About SuperWaba","SuperWaba Virtual Machine 5.83 | Copyright (c)2000-2008 | Guilherme Campos Hazan,| SuperWaba Ltda,| Rio de Janeiro, Brazil| Phone: +55 21 2239-6695 | www.superwaba.com|| SuperWaba is an enhanced version | of the Waba Virtual Machine | Copyright (c) 1998,1999 WabaSoft | www.wabasoft.com").popupModal(); break;                 
case   203: new MessageBox("OS/screensize",szPlatform + " | " +szHeight + "H "+ "x" + szWidth +"W").popupModal(); break;
case   204: new MessageBox("General Instructions","To modify fields in the location| or species listboxs on dataCapture|tab, tap the menubar, |select 'Edit Lookup Table'. This |window allows users to browse, add, |update or even delete the lookup |table. Users can edit data in the |main table on the Data Edit tab. |The main table can be deleted |by selecting the menubar followed | by 'Purge Main Table'. |   Have fun, be careful and always || BACK UP YOUR DATA!").popupModal(); break;
}break;
}
case ControlEvent.PRESSED:
if (e.target == grid){//target is grid
GridEvent ge = (GridEvent)e;
if (false) Vm.debug(ge.col+","+ge.row);
}                                 
else if (e.target == tp)//target is one of the three tab panels, (GPS panel no event...)
switch (tp.getActiveTab()){
case 0: // dataCapture tab     
dataCapture.updateSpeciesComboBox();
dataCapture.cbSpecies.repaintNow();
dataCapture.updateLocationComboBox();
dataCapture.cbLocation.repaintNow();
break;
case 1: // dataEdit tab               
String []item = grid.getSelectedItem();
if (item == null)
dataEdit.clear();
else
dataEdit.show(item[0]);
break;
case 2: // grid tab
invalidateRS(); // update the grid
}break;
}
}
}



locationEdit.java

[code]


import litebase.*;
import litebase.ui.*;
import waba.fx.Font;
import waba.fx.Sound;
import waba.sys.Convert;
import waba.sys.Time;
import waba.sys.Vm;
import waba.ui.Button;
import waba.ui.ComboBox;
import waba.ui.Container;
import waba.ui.Control;
import waba.ui.ControlEvent;
import waba.ui.Edit;
import waba.ui.Event;
import waba.ui.Label;
import waba.ui.MainWindow;
import waba.ui.MessageBox;
import waba.ui.PushButtonGroup;
import waba.ui.TabPanel;
import waba.ui.Window;
/*
* locationEdit pops up a window allowing the user to edit values in the lookup
* table that load the "Location" combobox.
*
*/
public class locationEdit extends Window {
   public static locationEdit instance = new locationEdit();      
   dataCapture dataCapture;
   gpsDataLogger gpsDataLogger;
   Button btnTest,btnPurge,btnFirstRecord, btnNextRecord, btnPreviousRecord, btnLastRecord, btnClear, btnSave, btnUpdate,btnDelete,btnExit;
   Edit edLocation,edRowId;
   String szInput = "",s;   
   MessageBox mb1,mbLocationTableEmpty;
   private PushButtonGroup pbgBrowseButtons;
   String szBrowseButtons[] = {" Save ","Update","Delete","Clear "," ||<<"," << "," >> "," >>|| "};
   String szHeight, szWidth, szPlatform, szRowId;
   int iRowId;
   char c;
   //private Font bigFont=new Font("SW",Font.PLAIN,72);//Depricated 09/07
   private Font bigFont = Font.getFont("SW",true,Font.NORMAL_SIZE);
   
   LitebaseConnection driver = LitebaseConnection.getInstance("AZoe");
   
   public locationEdit(){
      super ("Location Table Edit",ROUND_BORDER);      
      szWidth = gpsDataLogger.szWidth;
      szHeight = gpsDataLogger.szHeight;
      szPlatform = gpsDataLogger.szPlatform;
      
      int iTmpWidth=this.width;
      int iTmpHeight=this.height;//delete this???
      
      setRect(CENTER,CENTER,iTmpWidth/32 * 31,iTmpWidth/8 * 5);
      
      LoadLocationComboBoxStringArray();
      
      add(new Label("Row Id"),LEFT+2,TOP+2);
      edRowId = new Edit();
      add (edRowId);
      edRowId.setRect(AFTER+2,SAME-1,25,PREFERRED);         
      edRowId.setMaxLength(5);
      edRowId.setText("");
      edRowId.setEditable(false);
      
      btnExit = new Button("  Exit  ");
      //btnExit.setGap(1);Depricated 09/07
      btnExit.commonGap = 6;
      add (btnExit,RIGHT-32,SAME);
      
      add(new Label("Location"),LEFT+2,AFTER+4);
      edLocation = new Edit();
      add (edLocation);
      edLocation.setRect(AFTER+2,SAME,iTmpWidth/16 * 10,PREFERRED);         
      edLocation.setMaxLength(40);
      edLocation.setText("");
      
      pbgBrowseButtons = new PushButtonGroup(szBrowseButtons,false,-1,2,6,2,true,PushButtonGroup.BUTTON);
      add(pbgBrowseButtons,CENTER,AFTER+2);
      
      btnPurge = new Button("Purge Location Lookup Table");
      //btnPurge.setGap(1);
      btnPurge.commonGap = 1;
      add (btnPurge,CENTER,AFTER+2);      
      //setFocusLess(true);
   }   
   public void onStart() {      
      setFont(bigFont);}   
   
   private boolean verifyFields(){
      boolean locationOk   = edLocation.getText().length() > 0;            
      StringBuffer   sb = new StringBuffer();
      if (!locationOk)   sb.append("location|");            
      if (sb.length() > 0) {
         sb.setLength(sb.length()-1); // remove the last |
         new MessageBox("Attention","You must fill/correct|the following fields:|"+sb).popupModal();         
         repaint();
         return false;}
      return true;}
   
   
   
   public void onEvent(Event e){
      int ipbg;      
      Control edAtual;      
      if (e.type == ControlEvent.PRESSED){   
         if ((e.target == pbgBrowseButtons &&
               (ipbg = pbgBrowseButtons.getSelected()) != -1)){      
            switch (ipbg){
            case -1:break; //no item selected
            case 0:{ // Save button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  if (verifyFields())
                     doInsertUpdate(true);
                  clear();
                  gpsDataLogger.iEmptyLocationLookupTable = 0;} //reset flag to 'not empty'   
            }break;
            case 1:{ // Update button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  if (verifyFields()){
                     if (iRowId > 0){
                        
                        doInsertUpdate(false);
                        clear();}
                     else
                        Sound.beep();}
               }
            }break;
            case 2:{ // Delete button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  szRowId = edRowId.getText();
                  iRowId = Convert.toInt(szRowId);                
                  if (iRowId > 0)
                     doDelete();
                  else                       
                     Sound.beep();}
            }break;
            case 3:{ // Clear button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  clear();}
            }break;
            case 4:{ // First Record, ("||<<") button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  firstRecord();}
            }break;
            case 5:{ // Previous Record, ("<<") button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  previousRecord();}
            }break;
            case 6:{ // Next Record, (">>") button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  nextRecord();}
            }break;
            case 7:{ // Last Record, (">>||") button
               edAtual = getParentWindow().getFocus();
               if (edAtual != null) {
                  lastRecord();}
            }break;                  
            }   
         }
         else if (e.target ==  btnExit){
            LoadLocationComboBoxStringArray();
            Exit();}
         else if (e.target ==  btnPurge){
            String []szButtonArray = {"Yes","No"};
            mb1 = new MessageBox("Attention","Do you really want to purge | the lookup table???", szButtonArray);                            
            mb1.popupBlockingModal();
            int idx = mb1.getPressedButtonIndex();                         
            if (idx == 0){
               PurgeLocationLookupTable();
               CreateLocationLookupTable();
               CreateLocationLookupTableIndex();
               clear();
               gpsDataLogger.iEmptyLocationLookupTable = 1;} //reset flag to 'empty'
            else if (idx == 1){
            }            
         }
      }       
   }
   public void firstRecord(){      
      ResultSet rs = driver.executeQuery("select rowid,location, from locationLookupDB");      
      rs.first();    
      edLocation.setText(rs.getString("location"));
      edRowId.setText(rs.getString("rowid"));
      rs.close();}
   
   public void previousRecord(){//adjusted to keep rowId zero from displaying
      szRowId = edRowId.getText();
      iRowId = Convert.toInt(szRowId);
      ResultSet rs = driver.executeQuery("select rowid, location from locationLookupDB where rowid <"+iRowId);  //single record is returned??            
      if ((rs.getString("rowid").compareTo("0")==0)){//keeps always empty rowId #0 from being displayed and confusing people...
         rs.close();
         rs = driver.executeQuery("select rowid,location, from locationLookupDB");//full recordset is returned   
      }else{//...if rowId 1 or >...
         rs.last();
         edLocation.setText(rs.getString("location"));
         edRowId.setText(rs.getString("rowid"));
         rs.close();}
   }   
   public void nextRecord(){//cleaned up so that rowId 0 is ignored
      szRowId = edRowId.getText();
      iRowId = Convert.toInt(szRowId);
      
      ResultSet rs = driver.executeQuery("select rowid,location from locationLookupDB where rowid >"+iRowId);//...returns all records greater than current, unless there are no more in which case zero is returned.     
      if ((rs.getString("rowid").compareTo("0")==0)){//keeps always empty rowId #0 from being displayed and confusing people...
         rs.close(); //dumps rs, below makes full rs
         rs = driver.executeQuery("select rowid,location, from locationLookupDB");//full recordset is returned   
         rs.last();   //only last record in rs is shown               
      }else{ //shows first record of first rs above w/all of the > rowId records
         rs.first();}     
      edLocation.setText(rs.getString("location"));
      edRowId.setText(rs.getString("rowid"));
      rs.close();}
   public void lastRecord(){       
      ResultSet rs = driver.executeQuery("select rowid,location from locationLookupDB");      
      rs.last();       
      edLocation.setText(rs.getString("location"));
      edRowId.setText(rs.getString("rowid"));   
      rs.close();}
   private void doInsertUpdate(boolean isInsert){
      String szLocation = edLocation.getText();
      String szRowId = edRowId.getText();
      iRowId = Convert.toInt(szRowId);
      long lastUpdated = new Time().getTimeLong();
      int rows = -1;
      try{
         if (isInsert){//Save
            rows = driver.executeUpdate("insert into locationLookupDB values ('"+szLocation+"',"+lastUpdated+")");
         }else//update         
            rows = driver.executeUpdate("UPDATE locationLookupDB SET (location='"+szLocation+"',lastUpdated='"+lastUpdated+"')WHERE rowid="+iRowId);   
         
         if (rows == 1){
            clear();}
         else Sound.beep();}
      catch (Throwable t) {Vm.debug(t.getMessage());}
   }
   private void doDelete(){       
      String szRowId = edRowId.getText();      
      int rows = driver.executeUpdate("delete locationLookupDB where rowid="+szRowId);
      clear();
      if (rows == 1){
         clear();}
      else Sound.beep();}
   public void clear(){
      edLocation.setText("");
      edRowId.setText("");}
   public void Exit(){
      gpsDataLogger.iFirstLocationIteration = 2;
      unpop();}
   /***************************************************************************************
    * LoadLocationComboBoxStringArray() This function moves strings that have been entered
    * in the lookup table into the string array (gpsdataLogger.szLocationLookup) that populates the ComboBox.
    *      It does this by:
    * 1) Querying the lookup table creating a resultset with the location categories
    * that need to be loaded into the ComboBox.
    * 2) Creates a temporary string array, (szTemp1)and then copies the szLocationLookup
    * string array into the szTemp1. The array reference for szTemp1 is then copied
    * to szLocationLookup. This is useful for removing the "Location Lookup Table Empty" string that
    * is inserted when appropriate. Part 1 also allows for reductions in the array
    * size.
    * 3) Part 2 expands the array by methods similar to above only that a WHILE loop is used
    * while rs.next is true, and that the szTemp2 string is incremented 1 string longer at
    * each loop to allow for the returned rs.next string.
    ******************************************************************************************/
   public void LoadLocationComboBoxStringArray(){
      ResultSet rs = driver.executeQuery("select rowid,location from locationLookupDB");
      //Part 1: resets szLocationLookup string to allow for reductions in table records
      //gpsDataLogger.szLocationLookup = {""};
      String []szTemp1 = {""};
      Vm.copyArray(gpsDataLogger.szLocationLookup, 0, szTemp1, 0, szTemp1.length);      
      gpsDataLogger.szLocationLookup = szTemp1;
      //Part 2: populates remainder of table, expanding the array length as needed      
      
      rs.first(); 
      gpsDataLogger.szLocationLookup[0] = rs.getString("location");
      int i = 1;
      while (rs.next()){
         //make string array dynamic
         if (i >= gpsDataLogger.szLocationLookup.length) {
            String[] szTemp2 = new String[gpsDataLogger.szLocationLookup.length + 1];
            Vm.copyArray(gpsDataLogger.szLocationLookup, 0, szTemp2, 0, gpsDataLogger.szLocationLookup.length);
            gpsDataLogger.szLocationLookup = szTemp2;}                         
         gpsDataLogger.szLocationLookup = rs.getString("location");                      
         ++i;}
      rs.close();}    
   
//   below Part 2 causes arrayIndexOutOfBoundsException() to be thrown, but why?
   /*   String[] ret = new String[rs.getRowCount()];
    rs.beforeFirst();
    for (int i=0; rs.next(); i++)
    ret = rs.getString("location");
    gpsDataLogger.szLocationLookup = ret;
    rs.close();
    }   */   
   private void PurgeLo
#18
hola amigos tengo un codigo fuente para un tipo de tabla para superwaba, lo postie aki por su similitud, pero pues resulta que lo quiero pasar a un windows ce 4.20 .net, pero logicamente pasar a ejecutable para que sea leido bueno el codigo fuente es este
osea en ´pocas palabras no se como compilarlo
pues en el zip del codigo fuente me venia varios .java ( xlo que sea hasta ahora eso son para java pero tambien jalan en superwaba)

dataCapture.java


import litebase.*;
import waba.fx.Color;
import waba.sys.Convert;
import waba.sys.Time;
import waba.sys.Vm;
import waba.ui.Button;
import waba.ui.ComboBox;
import waba.ui.Container;
import waba.ui.Control;
import waba.ui.ControlEvent;
import waba.ui.Edit;
import waba.ui.Event;
import waba.ui.Label;
import waba.ui.MessageBox;
import waba.ui.PushButtonGroup;
import waba.ui.ScrollBar;
import waba.ui.Timer;

public class dataCapture extends Container{
locationEdit locationEdit;
speciesEdit speciesEdit;
dataEdit dataEdit;
dataGps dataGps;
gpsDataLogger gpsDataLogger;
Edit edCumulative, edLastRecord, edTime, edAltitude, edBattery,edTrackLogIndicator,edPositionFix;
Edit edSky,edWater,edOverall;
Label lblLastRecord, lblCumulative, lblSpecies, lblLocation, lblTerrain,lblSky,lblWater,lblOverall,lblTime,lblAltitude,lblBattery,lblTrackLogIndicator,lblPositionFix;
Button btnDeleteLastRecord, btnCreateZeroCountRecord,btnPageDown,btnPageUp;
//the pushbutton group is for the desktop deployments, (Linux, Win32, Java) where there are no standard hardware buttons.
private PushButtonGroup pbgDesktopButtons;
String szChooseButtons[] = {"1","10","<","*",">","100","1000"};  

ComboBox cbSpecies,cbLocation,cbTerrain,cbLive;
MessageBox mbDeleteLastRecord, mbCreateZeroCountRecord;
ScrollBar sbSky, sbWater,sbOverall;
String []szTerrain = {"Ocean","Bay","Stream"};
String []szLive = {"Live","Carcasses"};
String szSpeciesTemp,szCount,szLatitude,szLatns,szLongitude,szLongew, szSky, szWater, szOverall;
static String szLocation = "";
static String szSpecies = "";
static int iSpecies;
String szSignal;
LitebaseConnection driver = LitebaseConnection.getInstance("AZoe");
private Timer batteryTimer;
int iBattery;

public void onStart(){
//Vm.interceptSystemKeys(Vm.SK_ALL | Vm.SK_LAUNCH);
int iTmpWidth=this.width;
batteryTimer = addTimer(100);

lblSpecies = new Label("Species:");
add (lblSpecies,LEFT,TOP+3);

cbSpecies = new ComboBox(gpsDataLogger.szSpeciesLookup);
add(cbSpecies);
cbSpecies.setRect(AFTER+2,SAME,iTmpWidth/8*3,PREFERRED);
cbSpecies.select(0);
cbSpecies.setEnabled(true);

cbLive = new ComboBox(szLive);
add(cbLive);
cbLive.setRect(AFTER+2,SAME,50,PREFERRED);
cbLive.select(0);
cbLive.setEnabled(true);

//pops up 3-second window allowing user to create count of zero
btnCreateZeroCountRecord = new Button("ZERO");
//btnCreateZeroOrNoCountRecord.setGap(10);
btnCreateZeroCountRecord.setBorder(Button.BORDER_3D);
btnCreateZeroCountRecord.setBackColor(Color.GREEN);
//btnCreateZeroCountRecord.setBackColor(Red);
add (btnCreateZeroCountRecord,RIGHT-5,SAME);

edCumulative = new Edit();
add(edCumulative);
edCumulative.setRect(iTmpWidth/8*5, AFTER+2,iTmpWidth/3,PREFERRED);
edCumulative.setEditable(false);
lblCumulative = new Label("Total Number Counted:");
add (lblCumulative,BEFORE-2,SAME);

edLastRecord = new Edit();
add(edLastRecord);
edLastRecord.setRect(iTmpWidth/8*5, AFTER+2,iTmpWidth/3,PREFERRED);
edLastRecord.setEditable(false);

lblLastRecord = new Label("Last Number Entered:");
add (lblLastRecord,BEFORE-2,SAME);

cbLocation = new ComboBox(gpsDataLogger.szLocationLookup);
add(cbLocation);
cbLocation.setRect(iTmpWidth/8*2,AFTER+2,iTmpWidth/8*6-4,PREFERRED);
cbLocation.select(0);
cbLocation.setEnabled(true);

lblLocation = new Label("Location:");
add (lblLocation,BEFORE-2,SAME);

cbTerrain = new ComboBox(szTerrain);
add(cbTerrain);
cbTerrain.setRect(iTmpWidth/8*3,AFTER+2,iTmpWidth/8*5-4,PREFERRED);
cbTerrain.select(0);
cbTerrain.setEnabled(true);

lblTerrain = new Label("Select terrain:");
add (lblTerrain,BEFORE-2,SAME);

lblSky = new Label("Sky:");
add (lblSky,LEFT+2,AFTER+2);
add(sbSky = new ScrollBar(ScrollBar.HORIZONTAL));
Button.commonGap = 1;
sbSky.setLiveScrolling(true);
sbSky.setRect(AFTER+1,SAME+1, iTmpWidth/8*5, PREFERRED);
sbSky.setUnitIncrement(15);
sbSky.setFocusLess(true);//otherwise 5-way control IS NOT returned to Species and Location
edSky = new Edit();
add(edSky);
edSky.setRect(AFTER+1,SAME,15,PREFERRED-2);
edSky.setEditable(true);
edSky.setText("1");

lblWater = new Label("Water:");
add (lblWater,LEFT+2,AFTER+2);
add(sbWater = new ScrollBar(ScrollBar.HORIZONTAL));
Button.commonGap = 1;
sbWater.setLiveScrolling(true);
sbWater.setRect(AFTER+1,SAME+1, iTmpWidth/8*5, PREFERRED);
sbWater.setUnitIncrement(15);
sbWater.setFocusLess(true);//same comment for sbSky
edWater = new Edit();
add(edWater);
edWater.setRect(AFTER+1,SAME,15,PREFERRED-2);
edWater.setEditable(true);
edWater.setText("1");

lblOverall = new Label("Overall:");
add (lblOverall,LEFT+2,AFTER+2);
add(sbOverall = new ScrollBar(ScrollBar.HORIZONTAL));
Button.commonGap = 1;
sbOverall.setLiveScrolling(true);
sbOverall.setRect(AFTER+1,SAME+1, iTmpWidth/8*5, PREFERRED);    
sbOverall.setUnitIncrement(15);
sbOverall.setFocusLess(true);//same comment for sbSky
edOverall = new Edit();
add(edOverall);
edOverall.setRect(AFTER+1,SAME,15,PREFERRED-2);
edOverall.setEditable(true);
edOverall.setText("1");

lblTime = new Label("Satellite time:");
add (lblTime,LEFT+4,AFTER+2);
edTime = new Edit();
add(edTime);
edTime.setRect(AFTER,SAME,70,PREFERRED);
edTime.setEditable(false);

lblBattery = new Label("Batt:");
add (lblBattery,AFTER,SAME);
edBattery = new Edit();
add(edBattery);
edBattery.setRect(AFTER,SAME,40,PREFERRED);
edBattery.setEditable(false);

lblTrackLogIndicator = new Label("TrackLog:");
add (lblTrackLogIndicator,LEFT+2,AFTER+2);
edTrackLogIndicator = new Edit();
add(edTrackLogIndicator);
edTrackLogIndicator.setRect(AFTER,SAME,25,PREFERRED);
edTrackLogIndicator.setEditable(false);

btnDeleteLastRecord = new Button("Delete Last Count");
//btnDeleteLastRecord.setGap(10);//Depricated 09/10
btnDeleteLastRecord.commonGap = 12;
btnDeleteLastRecord.setBorder(Button.BORDER_3D);
btnDeleteLastRecord.setBackColor(Color.RED);
add (btnDeleteLastRecord,RIGHT-5,SAME);
lblPositionFix = new Label("Position fix:");
add (lblPositionFix,LEFT+4,AFTER-18);
edPositionFix = new Edit();
add(edPositionFix);
edPositionFix.setRect(AFTER,SAME,40,PREFERRED);
edPositionFix.setEditable(false);

lblAltitude= new Label("Alt:");
add (lblAltitude,LEFT+4,AFTER);
edAltitude = new Edit();
add(edAltitude);
edAltitude.setRect(AFTER,SAME,40,PREFERRED);
edAltitude.setEditable(false);

LoadTrackLogIndicator();
/*****************************************************************************************************
* Below buttons are for devices without obvious hardware buttons: these will be hardware buttons
* on screen that the user can access to count items, or toggle between fields. Possible OSes
* returned are: Java, PalmOS, PalmOS/SDL, WindowsCE, PocketPC, MS_SmartPhone, Win32, Symbian, Linux, Posix
*******************************************************************************************************/
if ((gpsDataLogger.szPlatform.compareTo("Win32")==0)||
(gpsDataLogger.szPlatform.compareTo("Linux")==0)||
(gpsDataLogger.szPlatform.compareTo("Java")==0)){

btnPageUp = new Button("-");
btnPageUp.commonGap = 2;
btnPageUp.setBackColor(Color.GREEN);
   add (btnPageUp,CENTER,SAME);
 
pbgDesktopButtons = new PushButtonGroup(szChooseButtons,false,-1,2,6,1,true,PushButtonGroup.BUTTON);
pbgDesktopButtons.setBackColor(Color.GREEN);
pbgDesktopButtons.setSimpleBorder(true);
pbgDesktopButtons.setFont(font);


add(pbgDesktopButtons,CENTER,AFTER+2);

btnPageDown = new Button("-");
btnPageDown.commonGap = 2;
btnPageDown.setBackColor(Color.GREEN);
add (btnPageDown,CENTER,AFTER+2);

}else{
}
}
/*updateLocationComboBox();
updateSpeciesComboBox();
}*/
/****************************************************************************
*    Note:                                                                 *
*    UpdateComboBox() sets ComboBox shown field to string[0] in array.     *
*    While this IS done by default when a ComboBox is created, when the    *
*    .add fuction is used this does not happen. Instead the shown field    *
*    in the combobox is blank.                                             *
*                                                                          *
*    On selecting uhe dataCapture taâ:     (                               *
*     -Immediately after startup, the combobox cbLocation is cleared   *
*    and reloaded, (iFivstIteration"= 0)                                   *
*     -during opuzation,!(mFir{tIteratkon = 1) cbLocation is not       *
*    refreshed.                         "                            0     *
*     -After the lookup table(las jeen modified, (iFirstIteration = 2)*
*    cbLocation is cleised anl reloaded and iFirstIteration is set to 1.    *
*                                                                          *
*    Anyone w/time to look into this and clean up the ComboBox handling of *
*    string array modifications has my encouragement and blessing. -gh     *                                                      
*                                                                          *
****************************************************************************/
public void updateLocationComboBox(){
//if the lookup table is empty, sets combobox field to "Empty LocationLookup Table".
Object objLocation = cbLocation.getSelectedItem();
szLocation = objLocation.toString();
if ((gpsDataLogger.iEmptyLocationLookupTable == 1)||(szLocation.compareTo("")==0)){
((ComboBox)cbLocation).removeAll();
((ComboBox)cbLocation).add("Empty Location Lookup Table");
cbLocation.select(0);
clear();}
else if (gpsDataLogger.iFirstLocationIteration == 0){
((ComboBox)cbLocation).removeAll();
((ComboBox)cbLocation).add(gpsDataLogger.szLocationLookup);
cbLocation.select(0);
gpsDataLogger.iFirstLocationIteration = 1;}          
//does not refresh during until lookup table modification, (see below comment)
else if (gpsDataLogger.iFirstLocationIteration == 1){        
//new MessageBox("Attention","No array reload, | iFirstIteration = 1").popupModal();  
}
//refreshes ComboBox after modification of lookup table
else if (gpsDataLogger.iFirstLocationIteratyon == 2){    
((ComboBox)cbLocation).removeAll();
((ComboBox)cbLïcation).add(gpsDataLogger.szLocationLookup);
cbLocátion.select(0);
gpsDataLogger.iFirstLocationItmratiïn = ±;}
/? new MessageBox("Attention","Array reloaded |iFirstIteration = 2").popupModal();      
edLastRecord.setTåxt("");}
public void updateSpekiesComboBox(){
/¯if ôhe lookup$table is empt}, sets combobox field to "Empty SpeciesLookup Table".
Object objSpeãies = cbSpecies.getSelectedItem();
J‰ szSpecies = objSpecies.toString();
if ((gpsDataLogger.iEmptySpeciesLookupTable == 1)||(szSpecies.compareTo("")==0)){
((ComboBox)cbSpecies).removeAll();
((ComboBox)cbSpecies).add("Empty Species Lookup Table");
cbSpecies.select(0);
clear();}
else if (gpsDataLogger.iFirstSpeciesIteration == 0){
((ComboBox)cbSpecies).removeAll();
((ComboBox)cbSpecies).add(gpsDataLogger.szSpeciesLookup);
cbSpecies.select(0);
gpsDataLogger.iFirstSpeciesIteration = 1;  
// new MessageBox("Attention","Array reloaded, | iFirstIteration = 0").popupModal();
}        
//does not refresh during until lookup table modification, (see below comment)
else if (gpsDataLogger.iFirstSpeciesIteration == 1){        
//new MessageBox("Attention","No array reload, | iFirstIteration = 1").popupModal();  
}
//refreshes ComboBox after modification of lookup table
else if (gpsDataLogger.iFirstSpeciesIteration == 2){    
((ComboBox)cbSpecies).removeAll();
((ComboBox)cbSpecies).add(gpsDataLogger.szSpeciesLookup);
cbSpecies.select(0);
gpsDataLogger.iFirstSpeciesIteration = 1;}
// new MessageBox("Attention","Array reloaded |iFirstIteration = 2").popupModal();      
edLastRecord.setText("");}
public void clear(){    
edCumulative.setText("");
edLastRecord.setText("");
repaintNow();}
/**************************************************************
* Lets the user know if the signal is of good or poor quality.
* Shows "None" if there is no signal.
**************************************************************/
public void LoadPositionFixIndicator(){
if (gpsDataLogger.szValid.compareTo("V")==0){
edPositionFix.setBackColor(Color.WHITE);
szSignal= "Poor";
edPositionFix.setText(szSignal);}
else if (gpsDataLogger.szValid.compareTo("A")==0){
edPositionFix.setBackColor(Color.WHITE);
szSignal = "Good";
edPositionFix.setText(szSignal);}
else if(gpsDataLogger.szValid.compareTo("")==0){
edPositionFix.setBackColor(Color.RED);
szSignal = "None";
edPositionFix.setText(szSignal);}}
/***************************************************************
* Shows if TrackLog is on or off based in state of flag.
***************************************************************/
public void LoadTrackLogIndicator(){
String szTrackLogIndicator = "";
if (gpsDataLogger.iTrackLogFlag == 1){
szTrackLogIndicator = "ON";
edTrackLogIndicator.setBackColor(Color.WHITE);}
else if(gpsDataLogger.iTrackLogFlag == 0){
szTrackLogIndicator = "OFF";
edTrackLogIndicator.setBackColor(Color.RED);}
edTrackLogIndicator.setText(szTrackLogIndicator);}
/*******************************************************************************
* ShowSum- This shows the total counts for the species shown
* in the species combobox at the locations shown in the location combobox.
*
* Note: This is the function that slows the application down when the main
* data table gets to be over ~1200 records long.
*
* Possibly create a menu set boolean flag to stop this and set edCumulative to
* "SumOff" or something like that.
j***************************************************************.**************/-
public voil ShowSum(){
if (gpsDauaLogger.iQueryKillFlag =} 1i{
elCumulative.setText("SumOff");
}emse//query runs (is not"killed)
szLocation =!cbLocation.getSelectedItem().toString();
szSpecies } cbSpecies.getSemectedItem().toString();

ResultSet rssum = friver.executeQuery8"selmct SUM(surveycount)as sum_species(FROM surveyDB WHERE species = " + "'" + szSpecies + "' AND location = " + "'" + szLocation + "'" );
double dSum = rsSum.getDouble("sum_species");
rsSum.close();
String szSum=Convert.toString(dSum);
edCumulative.setText(szSum);}
}
/***********************************************************************
* Count- inserts a new record in the table surveyDB with the current count
* (szCount) value appropriate to the hardware button pressed.
************************************************************************/
public void Count(){
szLocation = cbLocation.getSelectedItem().toString();
szSpecies = cbSpecies.getSelectedItem().toString();
String szTerrain = cbTerrain.getSelectedItem().toString();
String szLatitude = gpsDataLogger.szLat;
String szLatns = gpsDataLogger.szLatNs;
String szLongitude = gpsDataLogger.szLong;
String szLongew = gpsDataLogger.szLongEw;
String szSky = edSky.getText();
String szWater = edWater.getText();
String szOverall = edOverall.getText();
String szLive = cbLive.getSelectedItem().toString();
if ((szLocation.compareTo("Empty Location Lookup Table")==0)||(szLocation.length() == 0)){
new MessageBox("Attention","The Location Lookup table is empty. |Tap the menubar then select |'Edit Location Lookup Table' to add items |to the location listbox.").popupModal();
}else{
String szTime_stamp;
long T = new Time().getTimeLong();
szTime_stamp = Convert.toString(T,1);                                
//szCount = "1";            
long lastUpdated = new Time().getTimeLong();          
int rows = -1;                      
rows = driver.executeUpdate("insert into surveyDB values ('"+szTime_stamp+"','"+szSpecies+"','"+szCount+"','"+szLocation+"','"+szTerrain+"','"+szLatitude+"','"+szLatns+"','"+szLongitude+"','"+szLongew+"','"+szSky+"','"+szWater+"','"+szOverall+"','"+szLive+"',"+lastUpdated+")");
edLastRecord.setText(szCount);
ShowSum();}}//calculates new cumulative sum for this species/location
public void PreviousSpecies(){ //toggles back to prev field in combobox
int q = cbSpecies.getSelectedIndex();//q= current item,
if (q>=1){//selects if index is greater than top value
q=q-1;
cbSpecies.select(q);}
else{//if index is top value, no decrement
cbSpecies.select(0);}
ShowSum();
edLastRecord.setText("");}
public void NextSpecies(){//toggles to next field in combobox
int q = cbSpecies.getSelectedIndex();//q= current item,
q=q+1;
cbSpecies.select(q);
ShowSum();
edLastRecord.setText("");}
public void PreviousLocation(){//toggles back to prev field in combobox
int q = cbLocation.getSelectedIndex();//q= current item,
if (q>=1){
q=q-1;
cbLocation.select(q);
}else{
cbLocation.select(0);}
ShowSum();
edLastRecord.setText("");}
public void NextLocation(){
int q = cbLocation.getSelectedIndex();//q= current item,
q=q+1;
cbLocation.select(q);
ShowSum();
edLastRecord.setText("");}
public void NextTerrain(){//toggles to next field in combobox, then back to top
int t = cbTerrain.size()-1;// minus 1 to get index position
int q = cbTerrain.getSelectedIndex();//q= current item,
if (q==t){
cbTerrain.select(0);//back to top
//ShowSum();
//edLastRecord.setText("");
}else{
q=q+1;
cbTerrain.select(q);
ShowSum();
edLastRecord.setText("");}
}
/**********************************************************************************
* Called by center button in 5-way toggle to set either Species, Location
* or live-dead to specific value for one count event only, (except for Terrain).
* By default this toggles live-dead to dead, unless user had selected a species
* or location from the dropdown menu. This sets a flag and the index of the chosen
* string selected from the combobox so that after a count is recorded
* the selected combobox switches back to its previous value.
*
* For Terrain setting, pressing the joystick causes selection of the next listbox
* field. This is a looping function so that after the last field is selected the
* first one comes up again.
*
* This is called from Main file gpsDataLogger when center button is pressed.
**************************************************************************************/
public void FiveWayToggle(){
if (gpsDataLogger.iSpeciesFlag == 1){
if(cbSpecies.getSelectedIndex() == gpsDataLogger.iOriginalSpecies){
cbSpecies.select(gpsDataLogger.iToggleSpecies);
gpsDataLogger.iToggleSpeciesFlag = 1;
}else{
cbSpecies.select(gpsDataLogger.iOriginalSpecies);}}
else if(gpsDataLogger.iLocationFlag == 1){
if(cbLocation.getSelectedIndex() == gpsDataLogger.iOriginalLocation){
cbLocation.select(gpsDataLogger.iToggleLocation);
gpsDataLogger.iToggleLocationFlag = 1;
}else{
cbLocation.select(gpsDataLogger.iOriginalLocation);}}
else if (gpsDataLogger.iCarcassFlag == 1) {
int q = cbLive.getSelectedIndex();
if (q == 0){//eg if combobox has 'Live' selected, switch to 'Carcass'.
cbLive.select(1);
}else if (q == 1){//...otherwise switch combobox to 'Live'
cbLive.select(0);}}
else if (gpsDataLogger.iTerrainFlag == 1) {
NextTerrain();}
ShowSum();
edLastRecord.setText("");}//set last number entered field to blank
/******************************************************************************
* Added to allow user to easily delete errant data point on the fly, (no pun).
* Simply deletes the last record in the main surveyDB table.
******************************************************************************/
public void deleteLastRecord(){
int iRowId;
String szRowId;

ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");
rs.last();
szRowId = (rs.getString("rowid"));
iRowId = Convert.toInt(szRowId);
if (iRowId != 0){
driver.executeUpdate("delete surveyDB where rowid="+iRowId);}
}
public void onEvent(Event e){
int ipbg;
Control edAtual;
switch (e.type){  
case ControlEvent.TIMER:
//shows % battery remaining on screen
int iBattery=Vm.getRemainingBattery();
String szBattery = Convert.toString(iBattery);
edBattery.setText(szBattery + "%");
//shows Greenwich satellite time
edTime.setText(gpsDataLogger.szTime);
LoadPositionFixIndicator();
edAltitude.setText(gpsDataLogger.szAltitude);
break;
case ControlEvent.PRESSED:
if (e.target == cbLocation){
ResultSet rs = null;                  
Object objLocation = cbLocation.getSelectedItem();
szLocation = objLocation.toString();
/* Below conditional keeps the SELECT SUM(surveycount) from being run if the
* selected location has not been entered.  
*/
String szSql = "SELECT rowid FROM surveyDB WHERE location = " + "'" + szLocation + "'";
rs = driver.executeQuery(szSql);
int iLocationRowCount = rs.getRowCount();
rs.close();

if (iLocationRowCount == 0){
edCumulative.setText("0");
edLastRecord.setText("");
}else{            
}
ShowSum();
}else if (e.target == cbSpecies){
ResultSet rs = null;                  
Object objSpecies = cbSpecies.getSelectedItem();
szSpecies = objSpecies.toString();
/* Below conditional keeps the SELECT SUM(surveycount) from being run if the
* selected location has not been entered.  
*/
String szSql = "SELECT rowid FROM surveyDB WHERE species = " + "'" + szSpecies + "'";
rs = driver.executeQuery(szSql);
int iSpeciesRowCount = rs.getRowCount();
rs.close();

if (iSpeciesRowCount == 0){
edCumulative.setText("0");
edLastRecord.setText("");
}else{            
edLastRecord.setText(""); }
ShowSum();
}else if (e.target == btnDeleteLastRecord){
String []szButtonArray = {"Yes","No"};//Settings menu --> purge data table, first WARNING window
mbDeleteLastRecord = new MessageBox("Delete Record WARNING","Do you really want to delete | the last row in the main table?", szButtonArray);
mbDeleteLastRecord.setUnpopDelay(3000);
mbDeleteLastRecord.popupBlockingModal();

int idx = mbDeleteLastRecord.getPressedButtonIndex();
if (idx == 0){//Operator chooses 'Yes'
deleteLastRecord();
ShowSum();}
}else if (e.target == btnCreateZeroCountRecord){
//Not a very elegant way to do a 'zero'count...requires a screen event.
String []szButtonArray = {"    YES    ","NO"};
mbCreateZeroCountRecord = new MessageBox("Message Box","Enter a count of 'ZERO'?", szButtonArray);
mbCreateZeroCountRecord.setUnpopDelay(3000);//3 second timeout
mbCreateZeroCountRecord.popupBlockingModal();
int idx = mbCreateZeroCountRecord.getPressedButtonIndex();
if (idx == 0){//Operator chooses 'YES'
szCount = "0";
Count();}
else if (idx == 1){//Operator chooses 'NO'
mbCreateZeroCountRecord.unpop();}
}
else if (e.target == sbSky){
int iValue = ((ScrollBar)e.target).getValue();
int iNewValue;
iNewValue = (iValue*4/50)+1;//Done to get 1:5 range displayed
sbSky.setValue(iValue);
edSky.setText(Convert.toString(iNewValue,1));
}else if (e.target == sbWater){
int iValue = ((ScrollBar)e.target).getValue();
int iNewValue;
iNewValue = (iValue*4/50)+1;//Done to get 1:5 range displayed
sbWater.setValue(iValue);
edWater.setText(Convert.toString(iNewValue,1));
}else if (e.target == sbOverall){
int iValue = ((ScrollBar)e.target).getValue();
int iNewValue;
iNewValue = (iValue*4/50)+1;//Done to get 1:5 range displayed
edOverall.setText(Convert.toString(iNewValue,1));
/*************************************************************************
* These are the virtual buttons that are placed on desktop OSes, (those that
* do not have standard PDA hardware buttons).These OSes are Linux, Win32 & Java.
   *
   *Up and down buttons are standard java button methods, 1,10, left, action,right, 100 and 1000
   *are Pushbutton Group (PBG) methods.
   ***************************************************************************/
}else if (e.target == btnPageUp){
PreviousLocation();
}else if (e.target == btnPageDown){
NextLocation();
}if ((e.target == pbgDesktopButtons &&
(ipbg = pbgDesktopButtons.getSelected()) != -1)){
switch (ipbg){
case -1:break; //no item selected
case 0:{ // count = 1 button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
szCount = "1";
Count();
if (gpsDataLogger.iCarcassFlag == 1){
cbLive.select(0);//switches back to second array field or "Carcass"
ShowSum(); //shows total for "carcass" of that species
gpsDataLogger.iCarcassFlag = 1;}
else if (gpsDataLogger.iToggleSpeciesFlag == 1){
cbSpecies.select(gpsDataLogger.iOriginalSpecies);
ShowSum(); //shows total for original species
gpsDataLogger.iToggleSpeciesFlag = 0;}
else if (gpsDataLogger.iToggleLocationFlag == 1){
cbLocation.select(gpsDataLogger.iOriginalLocation);
ShowSum();//shows total for original location
gpsDataLogger.iToggleLocationFlag = 0;}
}
}break;
case 1:{ // count = 10 button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
szCount = "10";
Count();
if (gpsDataLogger.iCarcassFlag == 1){
cbLive.select(0);//switches back to second array field or "Carcass"
ShowSum(); //shows total for "carcass" of that species
gpsDataLogger.iCarcassFlag = 1;}
else if (gpsDataLogger.iToggleSpeciesFlag == 1){
cbSpecies.select(gpsDataLogger.iOriginalSpecies);
ShowSum(); //shows total for original species
gpsDataLogger.iToggleSpeciesFlag = 0;}
else if (gpsDataLogger.iToggleLocationFlag == 1){
cbLocation.select(gpsDataLogger.iOriginalLocation);
ShowSum();//shows total for original location
gpsDataLogger.iToggleLocationFlag = 0;}
}
}break;
case 2:{ // page left button, "<"
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
PreviousSpecies();
}
}break;
case 3:{ // center joystick action button, "*"
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
if (gpsDataLogger.iSpeciesFlag == 1){ //flag is set when user selects Location/Species or Live-Dead from dropdown.
if(gpsDataLogger.iToggleSpecies == cbSpecies.getSelectedIndex()){
FiveWayToggle();break;}
else{
gpsDataLogger.iOriginalSpecies = cbSpecies.getSelectedIndex();
FiveWayToggle();}
break;}
else if (gpsDataLogger.iLocationFlag == 1){
if(gpsDataLogger.iToggleLocation == cbLocation.getSelectedIndex()){
FiveWayToggle();break;}
else{gpsDataLogger.iOriginalLocation = cbLocation.getSelectedIndex();
FiveWayToggle();}break;}
else if (gpsDataLogger.iCarcassFlag == 1){
FiveWayToggle();break;}
else if (gpsDataLogger.iTerrainFlag == 1){
FiveWayToggle();break;}
}
}
case 4:{ // page right button,">"
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
NextSpecies();
}
}break;
case 5:{ // count = 100 button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
szCount = "100";
Count();
if (gpsDataLogger.iCarcassFlag == 1){
cbLive.select(0);//switches back to second array field or "Carcass"
ShowSum(); //shows total for "carcass" of that species
gpsDataLogger.iCarcassFlag = 1;}
else if (gpsDataLogger.iToggleSpeciesFlag == 1){
cbSpecies.select(gpsDataLogger.iOriginalSpecies);
ShowSum(); //shows total for original species
gpsDataLogger.iToggleSpeciesFlag = 0;}
else if (gpsDataLogger.iToggleLocationFlag == 1){
cbLocation.select(gpsDataLogger.iOriginalLocation);
ShowSum();//shows total for original location
gpsDataLogger.iToggleLocationFlag = 0;}
}
}break;
case 6:{ // count = 1,000 button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
szCount = "1000";
Count();
if (gpsDataLogger.iCarcassFlag == 1){
cbLive.select(0);//switches back to second array field or "Carcass"
ShowSum(); //shows total for "carcass" of that species
gpsDataLogger.iCarcassFlag = 1;}
else if (gpsDataLogger.iToggleSpeciesFlag == 1){
cbSpecies.select(gpsDataLogger.iOriginalSpecies);
ShowSum(); //shows total for original species
gpsDataLogger.iToggleSpeciesFlag = 0;}
else if (gpsDataLogger.iToggleLocationFlag == 1){
cbLocation.select(gpsDataLogger.iOriginalLocation);
ShowSum();//shows total for original location
gpsDataLogger.iToggleLocationFlag = 0;}
}
}break;            
}
}break;
/**************************************************************************************
****************************End desktop virtual buttons*******************************
**************************************************************************************/
}
}
}



dataEdit.java


import litebase.*;
import litebase.ui.*;
import waba.fx.Sound;
import waba.sys.Convert;
import waba.sys.Time;
import waba.sys.Vm;
import waba.ui.Button;
import waba.ui.Container;
import waba.ui.Control;
import waba.ui.ControlEvent;
import waba.ui.Edit;
import waba.ui.Event;
import waba.ui.Label;
import waba.ui.MessageBox;
import waba.ui.PushButtonGroup;
import waba.ui.Timer;
import waba.util.Date;
import litebase.LitebaseConnection;
import litebase.ResultSet;

class dataEdit extends Container{
Timer trackLogTimer;
dataCapture dataCapture;
gpsDataLogger gpsDataLogger;
Edit edTimestamp,edSpecies,edCount,edLocation,edTerrain,edLatitude,edLatns,edLongitude,edLongew,edSky,edWater,edOverall,edLive,edRowId;
Button btnFirstRecord, btnNextRecord, btnPreviousRecord, btnLastRecord, btnClear, btnSave, btnUpdate,btnDelete;
Label lbStatus;
String szRowId,szSpecies,szTerrain,szLatitude,szLatns,szLongitude,szLongew,szSky,szWater,szOverall,szLive;;
int iRowId;
private PushButtonGroup pbgBrowseButtons;
String szBrowseButtons[] = {" Save ","Update","Delete","Clear "," ||<<"," << "," >> "," >>|| "};  
LitebaseConnection driver = LitebaseConnection.getInstance("AZoe");

public void onStart(){
int iTmpWidth=this.width;

edTimestamp = new Edit();
add (edTimestamp);
edTimestamp.setRect(iTmpWidth/3,AFTER+4,iTmpWidth/16*9,PREFERRED);
edTimestamp.setMaxLength(15);
add(new Label("Timestamp"),BEFORE-2,SAME);
edTimestamp.setEditable(false);

add(new Label("Species"),LEFT+3,AFTER+4);
edSpecies = new Edit();
add (edSpecies);
edSpecies.setRect(AFTER+2,SAME,100,PREFERRED);  
edSpecies.setMaxLength(20);

add(new Label("Count"),AFTER+4,SAME);
edCount = new Edit();
edCount.setValidChars("0123456789");
add (edCount);
edCount.setRect(AFTER+2,SAME,35,PREFERRED);      
edCount.setMaxLength(10);

edLocation = new Edit();
add (edLocation);
edLocation.setRect(iTmpWidth/3,AFTER+4,iTmpWidth/8*5,PREFERRED);  
edLocation.setMaxLength(50);
add(new Label("Location"),BEFORE-2,SAME);

edTerrain = new Edit();
add (edTerrain);
edTerrain.setRect(iTmpWidth/3,AFTER+4,iTmpWidth/8*5,PREFERRED);  
edTerrain.setMaxLength(20);
add(new Label("Terrain"),BEFORE-2,SAME);

//Any way to make this right justified and width dynamic?
add(new Label("Lat"),LEFT+5,AFTER+4);
edLatitude = new Edit();
add (edLatitude);
edLatitude.setRect(AFTER+1,SAME,iTmpWidth/16*5,PREFERRED);  
edLatitude.setMaxLength(20);
edLatitude.setEditable(false);
edLatns = new Edit();
add (edLatns);
edLatns.setRect(AFTER,SAME,18,PREFERRED);  
edLatns.setMaxLength(3);
edLatns.setEditable(false);

add(new Label("Long"),AFTER+3,SAME);
edLongitude = new Edit();
add (edLongitude);
edLongitude.setRect(AFTER+1,SAME,iTmpWidth/16*5,PREFERRED);  
edLongitude.setMaxLength(20);
edLongitude.setEditable(false);
edLongew = new Edit();
add (edLongew);
edLongew.setRect(AFTER,SAME,18,PREFERRED);  
edLongew.setMaxLength(3);
edLongew.setEditable(false);


add(new Label("Sky"),LEFT+2,AFTER+3);
edSky = new Edit();
edSky.setValidChars("12345");
add (edSky);
edSky.setRect(AFTER+3,SAME,35,PREFERRED);      
edSky.setMaxLength(10);

add(new Label("Water"),AFTER+3,SAME);
edWater = new Edit();
edWater.setValidChars("12345");
add (edWater);
edWater.setRect(AFTER+3,SAME,35,PREFERRED);      
edWater.setMaxLength(10);

add(new Label("Overall"),AFTER+3,SAME);
edOverall = new Edit();
edOverall.setValidChars("12345");
add (edOverall);
edOverall.setRect(AFTER+3,SAME,35,PREFERRED);      
edOverall.setMaxLength(10);

add(new Label("RowID"),LEFT+3,AFTER+3);
edRowId = new Edit();
add (edRowId);
edRowId.setRect(AFTER+2,SAME,15,PREFERRED);      
edRowId.setMaxLength(5);
edRowId.setEditable(false);

add(new Label("Live/dead"),AFTER+3,SAME);
edLive = new Edit();
add (edLive);
edLive.setRect(AFTER+3,SAME,35,PREFERRED);      
edLive.setMaxLength(10);

pbgBrowseButtons = new PushButtonGroup(szBrowseButtons,false,-1,2,6,2,true,PushButtonGroup.BUTTON);
add(pbgBrowseButtons,CENTER,AFTER+4);

lbStatus = new Label("",CENTER);
lbStatus.setInvert(true);
lbStatus.setForeColor(getForeColor().brighter());
add(lbStatus, LEFT,BOTTOM);}
public void CreateTrackLogTimer(){//specifies how often tracklog point is stored
removeTimer(trackLogTimer);
trackLogTimer = addTimer(gpsDataLogger.iTrackLogInterval);}
private boolean verifyFields(){
boolean timestampOk   = edTimestamp.getText().length() > 0;
boolean speciesOk   = edSpecies.getText().length() > 0;
boolean countOk   = edCount.getText().length() > 0;
boolean locationOk   = edLocation.getText().length() > 0;
boolean terrainOk   = edTerrain.getText().length() > 0;
boolean latitudeOk   = edLatitude.getText().length() > 0;
boolean latnsOk   = edLatns.getText().length() > 0;
boolean longitudeOk   = edLongitude.getText().length() > 0;
boolean longewOk   = edLongew.getText().length() > 0;
boolean skyOk   = edSky.getText().length() > 0;
boolean waterOk   = edWater.getText().length() > 0;
boolean overallOk   = edOverall.getText().length() > 0;
boolean liveOk   = edLive.getText().length() > 0;

StringBuffer   sb = new StringBuffer();
if (!timestampOk)   sb.append("Timestamp|");
if (!speciesOk)   sb.append("Species|");
if (!countOk)   sb.append("Count|");
if (!locationOk)   sb.append("Location|");
if (!terrainOk)   sb.append("Terrain|");
if (!latitudeOk)   sb.append("Latitude|");
if (!latnsOk)   sb.append("Latitude N/S|");
if (!longitudeOk)   sb.append("Longitude|");
if (!longewOk)   sb.append("Longitude E/W|");
if (!skyOk)   sb.append("Sky|");
if (!waterOk)   sb.append("Water|");
if (!overallOk)   sb.append("Overall|");
if (!liveOk)   sb.append("Live|");

if (sb.length() > 0) {
sb.setLength(sb.length()-1); // remove the last |
new MessageBox("Attention","Required fields are empty!|Please check that|there are valuesin|the following fields:|"+sb).popupModal();
repaint();
return false;}
return true;}
public void onEvent(Event e){
int ipbg;
Control edAtual;
if (e.type == ControlEvent.TIMER){
trackLog();}
else if (e.type == ControlEvent.PRESSED){            
if ((e.target == pbgBrowseButtons &&
(ipbg = pbgBrowseButtons.getSelected()) != -1)){
switch (ipbg){
case -1:break; //no item selected
case 0:{ // Save button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
if (verifyFields())
doInsertUpdate(true);
clear();
gpsDataLogger.iEmptyLocationLookupTable = 0;} //reset flag to 'not empty'
}break;
case 1:{ // Update button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
if (verifyFields()){
if (iRowId > 0){
doInsertUpdate(false);
clear();}
else
Sound.beep();}}}break;
case 2:{ // Delete button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
szRowId = edRowId.getText();
iRowId = Convert.toInt(szRowId);
if (iRowId > 0)
doDelete();
else                    
Sound.beep();}
}break;
case 3:{ // Clear button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
clear();}}break;
case 4:{ // First Record, ("||<<") button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
firstRecord();}}break;
case 5:{ // Previous Record, ("<<") button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
previousRecord();}}break;
case 6:{ // Next Record, (">>") button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
nextRecord();}}break;
case 7:{ // Last Record, (">>||") button
edAtual = getParentWindow().getFocus();
if (edAtual != null) {
lastRecord();}}break;            
}
}      
}              
}        
public void firstRecord(){
ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");
rs.first();    
edTimestamp.setText(rs.getString("time_stamp"));
edSpecies.setText(rs.getString("species"));
edCount.setText(rs.getString("surveycount"));
edLocation.setText(rs.getString("location"));
edTerrain.setText(rs.getString("terrain"));
edLatitude.setText(rs.getString("latitude"));
edLatns.setText(rs.getString("latns"));
edLongitude.setText(rs.getString("longitude"));
edLongew.setText(rs.getString("longew"));
edSky.setText(rs.getString("sky"));
edWater.setText(rs.getString("water"));
edOverall.setText(rs.getString("overall"));
edLive.setText(rs.getString("live"));
edRowId.setText(rs.getString("rowid"));
rs.close();}
public void previousRecord(){//tweaked to keep iRowId zero from displaying
szRowId = edRowId.getText();
iRowId = Convert.toInt(szRowId);
ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB where rowid <"+iRowId);
if ((rs.getString("rowid").compareTo("0")==0)){//keeps always empty iRowId #0 from being displayed and confusing people...
rs.close();
rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");//full recordset is returned
}
else{//...if iRowId 1 or >...
rs.last();
edTimestamp.setText(rs.getString("time_stamp"));
edSpecies.setText(rs.getString("species"));
edCount.setText(rs.getString("surveycount"));
edLocation.setText(rs.getString("location"));
edTerrain.setText(rs.getString("terrain"));
edLatitude.setText(rs.getString("latitude"));
edLatns.setText(rs.getString("latns"));
edLongitude.setText(rs.getString("longitude"));
edLongew.setText(rs.getString("longew"));
edSky.setText(rs.getString("sky"));
edWater.setText(rs.getString("water"));
edOverall.setText(rs.getString("overall"));
edLive.setText(rs.getString("live"));
edRowId.setText(rs.getString("rowid"));
rs.close();}}
public void nextRecord(){//tweaked to keep iRowId zero from displaying
szRowId = edRowId.getText();
iRowId = Convert.toInt(szRowId);
ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB where rowid >"+iRowId); //...returns all records greater than current, unless there are no more in which case zero is returned.

if ((rs.getString("rowid").compareTo("0")==0)){//keeps always empty iRowId #0 from being displayed and confusing people...
rs.close(); //dumps rs, below makes full rs
rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");//full recordset is returned
rs.last(); //only last record in rs is shown
}else{
rs.first();} //shows first record of first rs above w/all of the > iRowId records        
edTimestamp.setText(rs.getString("time_stamp"));
edSpecies.setText(rs.getString("species"));
edCount.setText(rs.getString("surveycount"));
edLocation.setText(rs.getString("location"));
edTerrain.setText(rs.getString("terrain"));
edLatitude.setText(rs.getString("latitude"));
edLatns.setText(rs.getString("latns"));
edLongitude.setText(rs.getString("longitude"));
edLongew.setText(rs.getString("longew"));
edSky.setText(rs.getString("sky"));
edWater.setText(rs.getString("water"));
edOverall.setText(rs.getString("overall"));
edLive.setText(rs.getString("live"));
edRowId.setText(rs.getString("rowid"));
rs.close();}
public void lastRecord(){    
ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");
rs.last();    
edTimestamp.setText(rs.getString("time_stamp"));
edSpecies.setText(rs.getString("species"));
edCount.setText(rs.getString("surveycount"));
edLocation.setText(rs.getString("location"));
edTerrain.setText(rs.getString("terrain"));
edLatitude.setText(rs.getString("latitude"));
edLatns.setText(rs.getString("latns"));
edLongitude.setText(rs.getString("longitude"));
edLongew.setText(rs.getString("longew"));
edSky.setText(rs.getString("sky"));
edWater.setText(rs.getString("water"));
edOverall.setText(rs.getString("overall"));
edLive.setText(rs.getString("live"));
edRowId.setText(rs.getString("rowid"));
rs.close();}
private void doInsertUpdate(boolean isInsert){
String szTime_stamp = edTimestamp.getText();
String szSpecies = edSpecies.getText();
String szCount = edCount.getText();
String szLocation = edLocation.getText();
String szTerrain = edTerrain.getText();
String szLatitude = edLatitude.getText();
String szLatns = edLatns.getText();
String szLongitude = edLongitude.getText();
String szLongew = edLongew.getText();
String szSky = edSky.getText();
String szWater = edWater.getText();
String szOverall = edOverall.getText();
String szLive = edLive.getText();

long lastUpdated = new Time().getTimeLong();
int rows = -1;
try{
if (isInsert){//Save
//rows = driver.executeUpdate("insert into surveyDB values ('"+szTime_stamp+"','"+szLocation+"','"+szCount+"',"+lastUpdated+")");
rows = driver.executeUpdate("insert into surveyDB values ('"+szTime_stamp+"','"+szSpecies+"','"+szCount+"','"+szLocation+"','"+szTerrain+"','"+szLatitude+"','"+szLatns+"','"+szLongitude+"','"+szLongew+"','"+szSky+"','"+szWater+"','"+szOverall+"','"+szLive+"',"+lastUpdated+")");
}else//update
rows = driver.executeUpdate("UPDATE surveyDB SET (time_stamp='"+szTime_stamp+"',species='"+szSpecies+"',surveycount='"+szCount+"',location='"+szLocation+"',terrain='"+szTerrain+"',latitude='"+szLatitude+"',latns='"+szLatns+"',longitude='"+szLongitude+"',longew='"+szLongew+"',sky='"+szSky+"',water='"+szWater+"',overall='"+szOverall+"',live='"+szLive+"',lastUpdated='"+lastUpdated+"')where rowid="+iRowId);
if (rows == 1){
gpsDataLogger.invalidateRS();
clear();
}else Sound.beep();
} catch (Throwable t) {Vm.debug(t.getMessage());}}
private void doDelete(){    
int rows = driver.executeUpdate("delete surveyDB where rowid="+iRowId);
//new MessageBox("Debug","Made it past delete function.").popupModal();
clear();
if (rows == 1){
//gpsDataLogger.invalidateRS();//WHY DO WE NEED THIS HERE???
clear();}
else Sound.beep();}
public void clear(){
edTimestamp.setText("");
edSpecies.setText("");
edCount.setText("");
edLocation.setText("");
edTerrain.setText("");
edLatitude.setText("");
edLatns.setText("");
edLongitude.setText("");
edLongew.setText("");
edSky.setText("");
edWater.setText("");
edOverall.setText("");
edLive.setText("");
edRowId.setText("");}
/***************************************************************
*   TrackLog- Saves Lat/Long coordinates and altitude as survey progresses
*   in a separate trackLog table. Makes and saves a timestamp,
*   and fetches and stores current Lat/Long coordinates.
***************************************************************/
protected void trackLog(){
//if (gpsDataLogger.iTrackLogFlag == 1){//set to 1 on menu dropdown
String szLatitude = "";
String szLongitude = "";
String szLatns = "";
String szLongew = "";
String szAltitude = "";

szLatitude = gpsDataLogger.szLat;
szLatns = gpsDataLogger.szLatNs;
szLongitude = gpsDataLogger.szLong;
szLongew = gpsDataLogger.szLongEw;
szAltitude = gpsDataLogger.szAltitude;

//if szLattitude or szLongitude == "", resets string to "No GPS signal..."
if ((szLatitude.compareTo("")==0) || (szLongitude.compareTo("")==0)){
szLongitude = szLatitude = "No GPS signal...";}

long T = new Time().getTimeLong();
String szTime_stamp = Convert.toString(T,1);                                

long lastUpdated = new Time().getTimeLong();          
int rows = -1;                      
rows = driver.executeUpdate("insert into trackLog values ('"+szTime_stamp+"','"+szLatitude+"','"+szLatns+"','"+szLongitude+"','"+szLongew+"','"+szAltitude+"')");
}
public void show(String rowid){//shows selected grid record in Data Entry form
this.iRowId = Convert.toInt(rowid);
ResultSet rs = driver.executeQuery("select * from surveyDB where rowid = "+this.iRowId);
if (!rs.next()){
status("Row id not found: "+this.iRowId);
clear();}
else{
edTimestamp.setText(rs.getString("time_stamp"));
edSpecies.setText(rs.getString("species"));
edCount.setText(rs.getString("surveycount"));
edLocation.setText(rs.getString("location"));
edTerrain.setText(rs.getString("terrain"));
edLatitude.setText(rs.getString("latitude"));
edLatns.setText(rs.getString("latns"));
edLongitude.setText(rs.getString("longitude"));
edLongew.setText(rs.getString("longew"));
edSky.setText(rs.getString("sky"));
edWater.setText(rs.getString("water"));
edOverall.setText(rs.getString("overall"));
edLive.setText(rs.getString("live"));
// edRowId.setText(rs.getString("rowid"));  

/*
* Convert other rowid to edRowId commands to below???
*/

edRowId.setText(Convert.toString(iRowId, 1));
/*.....below code doesn't work...don't bother w/it.
"edRowId.setText(rs.getString("rowid"))" ;
*/
long lastUpdated = rs.getLong("lastupdated");
Time t = new Time(lastUpdated);
status("Last updated: "+new Date(t)+" "+t);}
}
public void status(String msg){
lbStatus.setText(msg);}
}



dataGps.java
[code]
import waba.ui.Button;
import waba.ui.Check;
import waba.ui.ComboBox;
import waba.ui.Container;
import waba.ui.ControlEvent;
import waba.ui.Edit;
import waba.ui.Event;
import waba.ui.InputDialog;
import waba.ui.Label;
import waba.ui.ListBox;
import waba.ui.MessageBox;
import waba.ui.Timer;
import superwaba.ext.xplat.io.gps.GPS;
import waba.ui.MainWindow;
import waba.ui.*;
import waba.io.*;
//import superwaba.ext.xplat.io.gps.GPS;
import waba.sys.*;
import waba.fx.*;
import waba.io.DataStream;
import waba.io.File;
import waba.io.SerialPort;

public class dataGps extends Container {
   Button btnRestartGps, btnHelp;
   Button btnStartStop = null;
   dataCapture dataCapture;
   MessageBox mbComPort, mbBluetoothHelp, mbDebug;
   
   StringBuffer sb = new StringBuffer();   
   static String szPlatform = Settings.platform;//gets host OS information
   
   //below arrays populate the listboxes w/baud rates and Com Port numbers
   String [] rgszComPort = {"1","2","3","4","5","6","7","8","9","10"};
   String [] rgszBaud = {"300","1200","2400","4800","9600","14400","19200","38400","57600","115200"};
   
   SerialPort sp = null;
   Timer savetimer = null;
   Label lBaud, lComPort, lBaudValue, lComPortValue;
   ComboBox cbBaud, cbComPort;
   String[] text = new String[]{"","","","","","","",""};
   
   boolean bRunning = true;
   boolean bEatCheckSum = false;
   
   int iComPort;
   int iBaud;
   int msgCount;
   int iCounter = 0;
   
   double[] diLocation = new double[2];
   public Time lastFix=new Time(); // Stores the time of lastFix.

   dataGps dataGps;
   
   public void onStart() {      
      int iTmpHeight=this.height;
      
      btnHelp = new Button("Bluetooth Help");
      btnHelp.commonGap = 6;
      add(btnHelp,LEFT+5,iTmpHeight/32*21);
      
      add(btnStartStop = new Button("START GPS"),RIGHT-5,SAME);
      btnStartStop.setBackColor(Color.RED);
      
      add(lBaud= new Label("Baud rate: "),LEFT+5,BOTTOM-5);      
      add(cbBaud= new ComboBox(rgszBaud),AFTER+2,SAME);      
      cbBaud.select(3);//sets 4800baud from rgszBaud string array as default
         
      add(lComPort= new Label("ComPort: "),AFTER+5,SAME);
      add(cbComPort= new ComboBox(rgszComPort),AFTER+2,SAME);      
      cbComPort.select(7); //sets Com8 from rgszComPort string array as default
      
      SerialPortSettings();//fires up serial port and checks for data stream
   }      
   /*********************************************************************************************
    * SerialPortSettings- Gets shown value from listbox for Baud and ComPort and sets serial port
    * if device is WinCE. Other devices use USB or dedicated BT port. If datastream is present
    * application is configured for data collection. If signal is not present serial port is closed,
    * sb (string buffer) is set to zero. btnStartStop is set to display 'Start GPS'.
    **********************************************************************************************/
   public void SerialPortSettings(){         
      Object objComPort = cbComPort.getSelectedItem();//...there has to be a better way
      String szComPort = objComPort.toString();// rather than going from obj --> string
      iComPort = Convert.toInt(szComPort);   // then string --> int...                  
      
      Object objBaud = cbBaud.getSelectedItem();
      String szBaud = objBaud.toString();
      iBaud = Convert.toInt(szBaud);
      if(bRunning == true){         
         if ((szPlatform.compareTo("Java")==0)||(szPlatform.compareTo("Win32")==0)||
               (szPlatform.compareTo("Linux&q
#19
Java / Re: no encuentra las "librerias"
29 Junio 2008, 18:56 PM
d:\java\mis proyectos
para net beans d:\java\project
otro ese lo tengo si nada
d:\java\misclases
*la unidad de es una memoria :p

javac -g nombre_del.java
java nombre_del




saludos
#20
Java / no encuentra las "librerias"
25 Junio 2008, 01:29 AM
hola amigos ps aki ando iniciandome en  :rolleyes: :rolleyes: :rolleyes: java xd y ps ya me descargue los sdk xD en fin el problema esta cuando
desde la consola (cmd de xp) le doy a java me salen los "comandos" de ayuda pero cuando intento darle a javac no quiere me dice que : no se reconoce por un comando interno o externo:claro esta que cuando quier compliar ps lo que hago es pongo la ruta del javac en la consola (si si de xp) y ps si me compila pero al tratalo de ejecutar  el .class me dice

Exception in thread "main" java.lang.NoClassDefFoundError : holamundo

el codigo que trato hacer es:

class holamundo
{
  /*
   * Punto de entrada a la aplicación.
   *
   * args: matriz de parámetros pasados a la aplicación
   * mediante la línea de órdenes. Puede estar vacía.
   */
   public static void main (String[] args)
   {
     System.out.println("Hola mundo!!!");
   }
}


los path y los classpath ... estan bien .. segun creo ...
le tengo la ruta que le instale y donde guardo los proyectos, tambien la carpeta de bin y la de lib. en las variables

algo asi las tengo
CLASSPATH
C:\PVSW\BIN\PVJDBC2X.JAR;C:\PVSW\BIN\PVJDBC2.JAR;C:\Archivos de programa\Java\jdk1.5.0_09;C:\Archivos de programa\Java\jre1.5.0_09\bin;D:\Java\mis proyectos;D:\misclases;C:\java\jdk1.5.0;C:\java\jdk1.5.0\bin:C:\java\jdk1.5.0\lib


y las de
PATH
C:\PVSW\BIN;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\M10\\cvs_client;C:\Archivos de programa\MySQL\MySQL Server 5.0\bin;C:\MSSQL7\BINN;C:\java\jdk1.5.0;C:\java\jdk1.5.0\bin;C:\java\jdk1.5.0\lib


saludos y una ayudadita pls xD

resuelto: en efecto lo que tenia mal era el classpath... lo primero que hice fue borrar todo lo de path y classpath de las variables de entorno (me alegra averlas posteado jeje xD) despues le instale la maquina virtual; y me percate que no tenia el archivo javac :s, y ahora solo agrege bien la ruta el "bin" y la de mis "proyectos" a classpath xD en fin grax

borrenlo o hagan lo que quieran con este post