Friday, April 15, 2016

APPEND FROM fails on Memo (VFP)

It appears that APPEND FROM command has an undocumented behaviour which is it cannot transfer its values into a Memo Field.  So in cases where you want to append data from say a csv, text or other types and your destination table has a memo field, then forget about this command.

Inside foxite forum, this exact problem causes a member to search for a way to achieve getting the values of a column of a CSV file that has more than 256 characters (definitely a candidate for a memo field type).  And APPEND FROM cannot simply just do that.

Having said, I showed him an alternative way to transfer data from a CSV file to our table with memo fields via excel automation.  It is quite simple really to do that.  Here is a small snippet for that:


Create Cursor junk (familyid i, Name c(60), Description M)

Local lcFile, loExcel As Excel.Application, lnLastRow
lcFile = Getfile("csv")
If !Empty(m.lcFile)
      loExcel = Createobject("excel.application")
      With loExcel
            .Workbooks.Open(m.lcFile)
            For lnloop = 2 To .Cells(1, 1).CurrentRegion.Rows.Count
                  Insert Into junk (familyid, Name, Description) Values ;
                        (.Cells(m.lnloop,1).Value,.Cells(m.lnloop,2).Value,;
                        .Cells(m.lnloop,3).Value)
            Next
            .ActiveWorkBook.Close
            .Quit
      Endwith
      Go Top
      Browse Normal
Endif



Using his sample data, here is the result of said automation:




And that is it, an easy way to import data from a CSV file (or any other files that excel supports) into our tables including ones for Memo fields.  Cheers!


Wednesday, April 13, 2016

ExcelExport

This is the counterpart of ssToExcel2 of ssClasses.  




Unlike ExcelPivot, this one simply transfers your cursor/table into excel with added formats, titles, etc.  An example is a ledger as shown at the bottom hereof

New properties

  • _PaperSize (1 = letter (Default), 3 = tabloid, 4 = ledger, 5= legal, 7 = executive, 8 = A3, 9 = A4, 11 = A5, 66 = A2, 119 = 11x17 size)
  • _MarginLeft, _MarginRight, _MarginTop, _MarginBottom (all Defaults to 1 inch)
  • _WithFooter (Default is .F.)
  • _Orientation (1 = Portrait (Default), 2 = Landscape)
  • _scaling (For zooming of sheet, default is 100)
  • _isProper = to turn the field names into PROPER() (Default or .T.) or UPPER() (.F.)
Miscellanous:
  • Added Progressbar (ProgBarX class)
  • Replaced Default body font from Tahoma to Calibri
  • Cleaned codes, speed up automation a bit
Shown below is what I meant by exporting cursor result to excel using this class on a spreadsheet with added features. Please note that with this class, it us entirely possible to do that even when you have zero automation knowledge.

Available only to ssUltimate subscribers.

ProgBarX

A simple progress bar which I created to replace the WAIT WINDOWs I put in ExcelPivot and ExcelExport classes.

Late last week, I decided to add more features onto it so its usage can go beyond those two classes such as for my other looping needs.

Progressbar on SQL SELECT

After that, I decided to see how I can incorporate this to an SQL SELECT as well, a desire which most of us share.  Here is how it looks like when incorporated on an SQL SELECT





SQL SELECT..  INTO CURSOR TEST RESULTS

* Update, April 14, 2016

Thought of another way to slash the overhead of progressbar on SQL SELECT.

Test is performed on our requested items for 9 years joining 5 tables in the process.   The SQL SELECT produces a cursor with  51,743 records:

- standard SQL SELECT (not using this class), average elapsed time on multiple runs is 1.83 seconds

- with ProgBarX showing records being processed, the bar and  percentage of completion (via SQLBar() method of class),
 average elapsed time is 4.50 seconds.

- with ProgBarX showing only the progress bar and percentage of completion via its SQLBarNoRec() method, average elapsed time of 3.72 seconds.

Again, the test is done on a 9-year dataset.  If it will be just within months or a year, the overhead will be less than a second.

The beauty of this is now we can see the number of records and its percentage of completion as those are created by an SQL SELECT.

Not only that, visual is the key.  Without a progressbar showing records being processed by an SQL SELECT with huge number of records, it appears to be slower than the one with ProgBarX.  That, of course, is an illusion as users do not like staring at the screen wondering what the hell is going on.  Users never like to unknowingly wait.

With this in place,  it provides users a real-time live feedback of what's going on behind the sql select processes as it shows the number of records being processed so far and can give them estimates on how much more to wait via the progressbar and percentage of process completion.  It also shows them that the app is currently doing something and has not frozen, as some tend to wonder or think on SQL SELECTs resulting to huge number of records.

This class though is only available for ssUltimate users.  The one added onto ssClasses does not have the latest features including that capability to show progress of an SQL SELECT.

A demo form for this is now available for my subscribers:




Interested in being a subscriber?  Email me at ss.classes.jun at gmail.com

Cheers!





Thursday, January 7, 2016

CalendarX

February 8 Update:

  • Introduced Localization via .Language property (0=Indonesian, 1=English, 2=Italian, 3=Spanish, 4=Turkish, 5=Romanian).  For other subscribers who hasn't submitted me yet the equivalent of days and months on their local language, please submit to me.  I also need the local word for "Today".



  • Fixed bug on improper end of month that happens when we click on the month picker.

====

This is based on my DTPickerX's idea of a faster date navigation/selection.  Have 3 return values:

.Value = date value
._bom = Beginning of Month
._eom = End of Month

Use Click event to perform other things as we change/select dates.  Here is how some classes of ssUltimate library looks on form.


Wednesday, January 6, 2016

Popup Calculator

I was popped yesterday by a fellow developer who showed me his form using ssDropCalc saying he is very satisfied with ssClasses library.  Thinking that others are really using said class, I decided to create a counterpart of that today for ssUltimate.  Of course, it has to be better.

What is PopCalc?

This is the counterpart of ssDropCalc of ssClasses but is better in many ways


  • Better Look
  • Unlike ssDropCalc which is a container class, this one is a control class
  • This one does not switch between formula and values.  The formula is simply shown on the popup calculator but it always returns the value
  • Better hotkeys (hover the mouse to see)
  • Highlights the keys pressed (if you do not want to use mouse)
  • Easier to use


Using on Form

Drop it and resize if you want.  On focus, this auto-pops the popup calculator and with starting value of what you put there (default is zero unless you change it via code, e.g., this.value = 123)




To exit the popup portion, either click outside, press Esc or press Enter (hotkey to pressing = sign) on your keyboard. To forcefully pop it up again if you want, press down arrow or Ctrl+Down Arrow keys.

Using on Grid

This is easier than ssDropCalc in that all you need to do is drop it down to a selected column of numeric value.  It will then take ownership of that column without setting anything further by doing the following:


  • Inheriting ControlSource
  • Inheriting Font Name and Size
  • Inheriting Alignment
  • Making itself the CurrentControl
  • Setting Column's Sparse = .F.



When used on Grid, the popup calculator won't auto-pop (by design).  The shortcut to pop it up is Ctrl+Down Arrow Keys.

There you are, the latest addition to ssUltimate!  The only thing I am not that satisfied is because I used here ButtonX class for better look, then there is a bit (nanosecond) delay in popping up form as it has to redraw those buttons on loading of popup calculator.  But I still prefer it than creating several images for those buttons.


Added January 7, 2016

Added/Utilized these properties:

Classic Property - Whether to use native commandbuttons (default or .T.) or ButtonX (.F.).  While buttonx looks cooler, there is that nanosecond delay that some of you may not like, thus this option.

Themes - Affects only Classic popup calculator, whether Themese are used or not on those native commandbuttons

SpecialEffect - Affects only Classic popup calculator.   Using the control class' SpecialEffect property so I won't need to add another myself, ignore what is shows:

Control Class                  Effect on Classic Popup
0 = Raised                     0 = 3D (Default)
1 = Sunken                     1 = Plain
2 = Flat                       2 = HotTracking




Friday, December 18, 2015

Controlling Windows 10 Auto-Updates

I bought a laptop a few months ago with a licensed Windows 8.1 OS.  But since a colleague of mine was able to download an offline Windows 10 free upgrade and burned it into a CD, then immediately after purchase I upgraded mine to that latest OS version (to hell with Windows 8).

And I love it (though on some machines, I encounter blank screens after upgrade that I was forced to reinstall an older version) but there are certain things we need to turn off on privacy settings for our own peace of mind.

Since my Windows 8 is a 64-bit home version, I got the 64-bit Home version of Windows 10 as well.  And unfortunately, while I like Windows 10 better, I am annoyed by its auto-Windows Update where MS totally removes our freedom to choose which upgrades we would like to be installed in our machine.

And due to that forced updates, I  have seen reports on the net of people wailing that after some certain updates, it short-circuit their machine making them curse in grief Windows 10.  Due to that is why I decided to create this post

Option 1 - Turn-off Windows Update

Right-click on taskbar, Task Manager, click on Services Tab, click on Open Services link below.

Inside Services, look for Windows Update, double-click it, choose "Disabled" as start-up type.

In some cases, you will wonder why sometimes after you've done this and after a while you re-checked its status, you will realize it is still running even though the start-up type is still on Disabled.  That is because MS provides a "recovery" action to be done in case it detects failure of a service.

So to totally kill this update, you have to turn off recovery action as well.  See image below



However, it appears that in some cases, even when these are implemented, Windows 10 can still do an uncontrolled update.

Is turning it totally off a good suggestion?  I will leave that to each of you whether you are already comfortable with your OS 10 version or if you want it to still install some patches.  In which case you can re-enable it back at your own accord.

This next alternative might be better for you

Option 2 - Intercept Updates

Okay, this option deals with still leaving windows 10 to do an auto-update but now we will be intercepting its updates.  And to do that you have to install 3rd party downloaders such as Internet Download Manager (IDM), Xtreme Download Manager (XDM), and Download Accelerator Plus (DAP), to name a few.

I am using on my end now XDM 2015.  So when Windows 10 attempts to download a file, this is now being intercepted by XDM.  It will then ask you whether you want to continue downloading it or you can press Cancel.  The moment you pressed/clicked Cancel button, then XDM will release its hold on said intercept and the OS will be given back control over it.

In this way, it is like having control as well which of the attempted downloads will be given back to Windows.  What I do on my end is for those I do not like to be downloaded, I leave XDM intercept window and just move it out of the way and for those I like my OS to download, I clicked Cancel to allow my OS to download it.




There you go, ways to control windows update features of Windows 10.  Cheers!

Monday, December 14, 2015

What’s on ssUltimate Library

Want to be a subscriber?  Click  Subscribe to ssUltimate

Here are what’s inside ssUltimate Library in alphabetical order (from time to time I update the write ups on each link to inform of the enhancements I made).  The library comes with a sample project with demo forms with the following:

  • CloseX - Is another form of titlebar class that gives a unique appearance.  It can have a titlebar or just that plain close button located at the right side of the form
  • DropClock – a dropdown clock.
  • FaderX – a class that when dropped simply on form will turn irregularly shaped objects into transparent.  Can change transparency level on runtime
  • ImgBack – is an image class that when dropped on form, will give it a background wallpaper.   This wallpaper can be changed any time via double-clicking and it will be retained until you change it again.  
  • MonthYear – a class that looks like a command button which shows the month and year.  This was created before I gave dtPickerX the same capability
    • MSOButton – a class that looks like a command button on Office 2010. 
    • PolyClock – an analog clock that can be dropped on form, can be moved, change skins, etc.
    • ScrollTime – is a time control class that scrolls up or down via mouse scroll.  Similar to what mobile devices has
    • StickyX - Another class that can be used to replace editbox with a sticky note look.
    • TimerX - is a time picker based on spinners.  
    • TransparentX – This one simply make the irregularly shaped image used on form instant transparent

    Want to be a subscriber?  Click  Subscribe to ssUltimate