Monthly Archives: September 2026

Clarion Unicode preview — beta refresh build 14373

Clarion · Unicode Preview · Beta Refresh

Refresh build 14373 — lost SQL connections re-establish themselves, SQL browses fetch faster, and the help gains a “How do I” chapter

A SQL drop. Lost server connections now automatically re-establish the connection to the server and the application continues gracefully: a VPN reconnect, a firewall that closed the session, a laptop that woke up — the files and views stay open, the next operation reconnects, a browse that was paging simply keeps paging. Two new browse prompts fetch a SQL page in one round trip instead of one row per trip, with a BLOB in the page up to 10x faster on SQL Server. A SQL connection configures itself from the OWNER string alone, no DSN on the user’s machine. The IDE’s “select a folder” is the modern Windows folder dialog everywhere. And the F1 help has a “How do I …” chapter with a task topic for every section of the tester guide, every topic in the Index. Plus the fixes and additions from beta testers’ reports in the forums: Known Folders, the wide CLIB twins, a two-picture DateTime format, a friendlier previewer. Already testing? Everything below is new since build 14313.

SQL automatic reconnect · ‘Page fetch size (SQL)’ · ‘BLOB fetch (SQL)’ · PROP:BlobFetch · DSN-less connect IDE the modern select-folder dialog on every “…” Help “How do I …” chapter · every topic indexed · Customizing a SQL Connection Compiler USTRING link names sz / z — rebuild multi-DLL solutions together From the forums Known Folders · CLIB wide twins + RmDirW · Pict(dt, pic1, sep, pic2) · previewer Jump / sidebar · varchar(max) as BLOB · BLOB hot fields · VALUE() / PROP:Value / SPIN FROM wide · PROP:FromQueue · Designer paints <13,10>

Highlights of this drop — then the full tester guide, whose “What’s new” section lists everything that changed since you last read it.

↻

Lost server connections re-establish themselves, the application continues

ODBC, MSSQL, Pervasive SQL and SQL Anywhere drivers. When the link to the server drops under a running program, every file and view of that connection stays open, the failed operation reports error 90 with the driver’s own message (FILEERRORCODE() = 08S01), and the next operation reconnects by itself — including a table the program opens for the first time after the drop, so the first save after an outage goes through. In a generated application (ABC and Clarion chains) the user sees one error box and the usual retry prompt, and Yes saves the record. A browse that was paging when the link went keeps paging: the generated browse re-runs its page fill once, on a fresh connection, and the user sees nothing at all. Hand code simply retries the failed statement; a VIEW continues after a RESET to its last position.

≫

SQL browses fetch a page per round trip — two new prompts

BrowseBox › Actions › Default Behavior, both chains. ‘Page fetch size (SQL)’: a value n fetches n rows per server round trip (ABC sets BRWn.PageSize, the Clarion chain emits BUFFER(view, n, 2, 0, 60)); a Clarion-chain SQL browse moves from one row per trip to n. ‘BLOB fetch (SQL)’ with the new PROP:BlobFetch: a browse that shows a BLOB keeps its page fetch — the driver positions on your row and reads the page in one trip, a 20-row page fill on SQL Server measured 110 us/row down to 11.5. Blank prompts generate exactly what they did, so an existing app changes nothing until you set them. A BLOB projected into a VIEW is the current row’s from the very first read, so a TEXT or IMAGE bound to a browse hot-field BLOB follows the highlight bar.

◫

AppGen: a BLOB can be a browse hot field

Pick a BLOB as a hot field on a BrowseBox and a TEXT or IMAGE bound to it follows the highlight bar: the picture, the note, the document of the selected row. The templates put the BLOB into the browse’s VIEW as a PROJECT and never into the queue (a queue cannot LIKE() a BLOB), and the highlighted row is re-fetched on every selection change, so the control always shows the current row’s blob. Both template chains, no hand code.

⚙

A SQL connection configured from the OWNER string alone

The UNICODECONNECT form works without a DSN on the PostgreSQL Unicode driver and on SQL Server: name the driver DLL and its settings as keywords in the OWNER and nothing is configured on the user’s machine. The new help topic “Customizing a SQL Connection” lays out the three layers — the OWNER string, the driver string switches, the ODBC driver’s own settings — with a copy-ready example for each. Over a slow link to SQL Server, /MULTIPLEACTIVERESULTSETS=TRUE streams the rows instead of a server cursor round trip per fetch block; the guide’s SQL section says when to use it.

▣

The IDE picks folders with the modern dialog

Every “…” in the IDE that asks for a folder — New Project’s Location, the default project location in Options, Find in Files’ Look in, the project option folders — opens the Windows common item dialog in folder mode: the navigation bar, search, the places on the left, a “New folder” button, resizable. The small “Browse For Folder” tree is gone from the IDE. The most reported request of the beta, inside and outside.

⌂

Known Folders: Downloads, Documents, AppData and every other one, by name

SpecialFolder.GetKnownDir(KF:Downloads) returns the user’s Downloads folder, the one the CSIDL list never had. KNOWNFOLDER.EQU declares the common KNOWNFOLDERIDs as KF: equates — Downloads, Documents, Desktop, Pictures, Music, Videos, LocalAppData, RoamingAppData, ProgramData, Profile, Fonts, ProgramFiles, ProgramFilesX86, Startup, the Public ones — and any other folder from KnownFolders.h is one more equate written the same way. GetKnownDir(KF:Documents, 'MyApp') appends your sub-directory, the path comes back as a USTRING so a folder outside the ANSI code page is exact, and GetKnownError() holds the HRESULT of the last call. The CSIDL methods you already use are unchanged.

✚

Wide CLIB twins, a two-picture DateTime, a friendlier Report previewer

CLIB.CLW declares the wide twins FnSplitW, FnMergeW, MkDirW, AccessW and the new RmDirW, so a program that includes CLIB.CLW calls them by name. DateTimeUtil.Pict(dt, '@D10-', 'T', '@T04') joins two pictures with a separator — an ISO stamp, a file-name stamp — in one call. The report previewer’s Jump to a Page shows “of N pages”, clamps a typed number, and has First / Last buttons; the thumbnail sidebar’s scroll buttons sit side by side at the top. And the driver trace now shows a USTRING value in full, in the record dump and on the SQL bind lines, so a trace tells the truth about Unicode data. A browse sorted by a USTRING key on SQL Server positions cleanly from every sort tab, and saving a BLOB with bind tracing on no longer ends in an access-violation box. A wide VALUE() on a CHECK or RADIO lands in the USE variable with its exact units, {PROP:Value} on any captioned control and a SPIN’s wide FROM() deliver exact units too, and CONTENTS(?Combo) answers for a COMBO without a USE variable. And the Window and Report Designers paint <13,10>, every decimal metachar and {n} repeats exactly like the compiled window.

?

F1 help: a “How do I …” chapter, every topic in the Index

Right after Welcome to Clarion in Contents: 22 task topics, one per section of the tester guide (Unicode strings, screens, reports, SQL, TopSpeedW, the lost connection, the faster SQL browse …), each linking to the reference topics it needs. The Index finds them by title and by the words you would type — “lost connection”, “reconnect”, “faster SQL browse”. Every topic in the help now carries its title and chapter as index keywords, the 2026 reference topics carry a “See also” line, and the new browse prompts are documented where F1 on the prompt lands.

✎

From beta testers’ reports: dictionary, AppGen, DATETIME, previewer

varchar(max) imports as a BLOB, so the whole column travels (it joins text, ntext, nvarchar(max) and varbinary(max) under one rule). DateTimeUtil builds from LibSrc alone and gains Pict(dt, picture) — the date part through @D4, the time part through @T4, the whole value through @DT. The Window Previewer’s generated program reads better and compiles every time, with @DT controls primed with a real date-time sample.

ƒ

USTRING link names of their own — rebuild multi-DLL solutions together

USTRING parameters now mangle as sz (every non-RAW form) and z (RAW), a link name no other type can produce, so a *USTRING and a *SHORT,ANY prototype never share one. What to do on this build: regenerate and rebuild every module of a multi-DLL solution together (template-generated .exp files regenerate on their own); a hand-written .exp with zu/su lines changes them to sz; Pro2Exp / Exp2Map users update the letter table.

Full tester guide — mental model, conversion rules, DCT import table, screen controls, reports, blobs, SQL / SQLite / text drivers / TopSpeedW / Memory / IP, recipes, the new-language-surface quick reference, and what to focus on when testing. The guide’s “What’s new” section lists everything in this drop, and every section has its task topic in the F1 help’s “How do I …” chapter.

Open the full Unicode Tester Guide

Report tool authors — the wide generator surface (IReportGeneratorW), format detection, the EMF record set, transition paths per integration style, and the PageTextIndexClass text index the previewer searches with:

EMF Page Files — Transition Note

Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation — if you see something different, the beta forum is the place.

Clarion Unicode preview — refreshed beta build (14313)

Clarion · Unicode Preview · Beta Refresh

Refresh build 14313 — a modern report previewer, Unicode reports by default, a DATETIME type for SQL, and the wide file-name family complete

A bigger drop. With EMF pages new functionality is within reach, and the first of it is a new report previewer: search with highlighted hits, page thumbnails, marks, print or save the marked pages, copy text off the page — on a wide report all of it Unicode. For this beta release every existing application picks the previewer and Unicode (EMF) reports up automatically from the templates on its next generate, so de facto every app gets EMF reports; a hand-coded program reaches the same with the new compiler pragma define(report_unicode=>on). Tell us how that lands on your reports and your third-party report tools — that default is yours to confirm. A new DATETIME type carries a SQL timestamp to 100 nanoseconds through the compiler, the dictionary, the import wizard and every SQL driver. RUN() and COMMAND() go wide, closing the file-name family. Plus the fixes from beta testers’ reports in the forums. Already testing? Everything below is new since build 14258.

Reports ReportPreviewClass · Unicode reports by default · report_unicode define · PROP:Unicode Data DATETIME type · @DT picture · DateTimeUtil · import wizard checkbox Runtime RUN / COMMAND wide · CLIB wide twins · ALL() negative count IDE IMAGE field picker · no BLOB list columns · property search

Highlights of this drop — then the full tester guide, whose “What’s new” section lists everything that changed since you last read it.

▤

A modern report previewer — reached through EMF pages

ReportPreviewClass: text search across every page with the hits highlighted (Ctrl+F, F3, match case), a thumbnail sidebar, page marks with Print Marked and Save Marked Pages As, Fit Page and Ctrl+plus/minus zoom, Shift+drag to copy the text under the band, layout remembered in the INI, the index built on its own thread so a 1,000-page report opens at once. On a wide report the search is Unicode. It is the default for new apps, and a Print Previewer prompt that still reads PrintPreviewClass generates the new class on the next generate; “Keep the classic PrintPreviewClass previewer” opts out.

☷

For this beta release, reports print Unicode (EMF) by default

The new global “Unicode reports” check (on by default for this beta, so we hear how it lands) makes each Report procedure set Report{PROP:Unicode} = True as its report opens — USTRING fields, wide captions and emoji print as typed on .emf pages, error 546 stops, the PDF/HTML/TXT targets register their wide face; a per-procedure “Unicode pages” prompt opts one report out. The same check writes the compiler’s report_unicode define into the project, so hand-coded REPORT structures carry the UNICODE attribute too (PRAGMA('define(report_unicode=>on)') in a hand-coded module). PROP:Unicode is documented as the run-time face of the attribute. Watch for: a third-party page tool that read .wmf files sees .emf now.

⌚

DATETIME: a date and a time in one value, to 100 ns

A new data type — seconds since the Clarion day zero with seven decimal places, the precision of SQL Server’s datetime2(7). Compares, sorts, keys and does arithmetic in seconds; zero is blank. In a SQL table it reads and writes the backend’s timestamp column and CREATE() declares it: datetime2(7), timestamp(6), SQLite ISO text, Oracle TIMESTAMP(7); a VIEW filter on it is evaluated server-side. The @DT…@DT7 picture formats and enters it, DateTimeUtil converts to and from DATE and TIME (SetNow reads the precise clock), the Dictionary Editor offers the type, and the SQL import wizards create it for timestamp columns when “Import date-time columns as DATETIME” is checked (off by default — nothing changes for existing dictionaries).

▶

RUN() and COMMAND() wide — the file-name family is complete

RUN() takes a USTRING command line: a program in a folder outside the Windows codepage is located and started exactly and its parameters travel as typed; an ANSI-only USTRING takes the old path byte-for-byte. COMMAND() no longer shifts every parameter by one for a program that lives in such a folder (the ₿ folders from the forum). CLIB.CLW stays narrow by design, with four exported wide twins (_fnsplitW, _fnmergeW, _mkdirW, _accessW). With EXISTS, COPY/RENAME/REMOVE, DIRECTORY, FILEDIALOG and the PATH family already wide, that closes the family.

✎

Designers and dictionary, from beta testers’ reports

The Window Designer’s IMAGE gets the dictionary-field picker (BLOB and BINARY MEMO fields, the ones IMAGE,USE() accepts), and dropping a BLOB onto a window creates an IMAGE bound to it. A BLOB is never offered as a list-box column, and an app that already has one stops generation with a plain sentence instead of the compiler’s “Illegal parameter for LIKE”. The property-pane search is case-insensitive in every designer, and UNICODE is coloured as an attribute in the editor.

ƒ

Fixes from the forums: ALL(), the PDF class, datetime2 DDL

ALL() with a negative count returns ” again instead of “Clarion RTL internal exception” 0B000000. ABPRPDF.CLW compiles without warnings, and a real defect went with them: a wide report text longer than 99 units was cut in the PDF (150 units drew as 15). MS SQL CREATE of the legacy datetime group emits datetime2(7) on SQL Server 2008 and later — “Specified scale 8 is invalid” is gone.

?

F1 help, current for this drop

The IDE help (ClarionHelp.chm) carries new topics for DATETIME, the Date-Time Pictures, ReportPreviewClass, PageTextIndexClass and the Report template’s Preview Options; PROP:Unicode and the report_unicode define on the REPORT pages; the “Unicode reports” and “Unicode pages” prompts; and the three new stock icons ICON:PageUp, ICON:PageDown and ICON:Clear.

Full tester guide — mental model, conversion rules, DCT import table, screen controls, reports, blobs, SQL / SQLite / text drivers / TopSpeedW / Memory / IP, recipes, and what to focus on when testing. The guide’s “What’s new” section lists everything in this drop; changes are also flagged inline with dated “beta refresh” notes.

Open the full Unicode Tester Guide

Report tool authors — the wide generator surface (IReportGeneratorW), format detection, the EMF record set, transition paths per integration style, and now the PageTextIndexClass text index the new previewer searches with, usable by your own viewer as-is:

EMF Page Files — Transition Note

Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation — if you see something different, tell us on the beta forum.

Clarion Unicode preview — refreshed beta build (14258)

Clarion · Unicode Preview · Beta Refresh

Refresh build 14258 — the designers keep your Unicode, the fixes from four beta threads, and the wide path family

A shorter drop, built from the beta forum. The Window and Report Designers accept every U'' spelling and no longer rewrite it into a raw glyph; the Window Previewer can keep the generated program; DROP lists and COMBOs take a wide FROM at runtime; INSTRING() searches backwards from past the end; FILEDIALOG() opens on a Unicode folder; and the porting notes for SIZE() are in the help. Threads 47, 54, 57 and 60, closed. Already testing? Everything below is new since build 14234.

IDE U” hex literals in the designers · ANSI files keep U” · Save Preview Program Runtime DROP/COMBO wide FROM · INSTRING · FILEDIALOG Help SIZE() porting notes · INSTRING start rule

Highlights of this drop — then the full tester guide, whose “What’s new” section and dated “beta refresh” markers flag exactly what changed since you last read it.

✎

Designers: every U” spelling works, and your Unicode stays Unicode

The Window and Report Designer parse U'<26DDh>', U'<1F600h>' and {n} repeats exactly like the compiler — build 14234 refused a window with a hex literal. And a designer opened from an ANSI .clw now writes wide text back as a U'' literal (decimal units) instead of a raw glyph that forced the save-as-UTF-8 prompt; UTF-8 sources keep the glyph as before.

☷

DROP lists and COMBOs: a runtime wide FROM

?List{PROP:From} = U'…' on a LIST,DROP() or a COMBO keeps its characters — in 14234 that one property took the narrow path, so a declared FROM(U'…') worked and the runtime write showed ?. Reminder for continued FROM strings: put U on every piece.

ƒ

INSTRING backwards from past the end, and two porting notes

INSTRING(sub, s, -1, SIZE(s)) now finds the last match on a CSTRING or USTRING (those push only their used length, so a start past the end returned 0). Porting notes in the help: SIZE() of a USTRING is bytes, so a Windows API’s character count is SIZE(v)/SIZE(v[1]) — right for every string type — never SIZE(v).

▭

Window Previewer: Save Preview Program

A second checkable item in the Window menu, under Unicode Preview: latched on, the generated preview program, its project and exe move into .WinPreview\ in the project folder with the injection include beside them, so File ▸ Open builds and runs it as-is; a preview that fails to compile still keeps its source. Both latches are menu items only — the toolbar keeps just the Preview button.

⌂

FILEDIALOG positioned; the “Internal error 01” dialog is gone

FILEDIALOG() with FILE:Directory and a USTRING start folder opens with the selection on that folder even when its name is outside the Windows codepage. The “Output corrupted stack, wsldebug.cpp line 412” dialog was the release diagnostic logger misfiring; it now logs to C120LOG.TXT and carries on, so what you see next is the real fault.

\

PATH, SETPATH, LONGPATH and SHORTPATH are wide

A USTRING folder or file name is resolved in its exact characters and the result comes back wide, so a folder whose name lies outside the Windows codepage can be entered with SETPATH and read back with PATH() (the earlier drop best-fit it to ? and SETPATH failed with error 3). The no-argument forms return the current directory exactly; a STRING argument or receiver gets the same bytes as always. With EXISTS, COPY/RENAME/REMOVE, DIRECTORY and FILEDIALOG already wide, only RUN remains in the file-name family.

?

F1 help, current for this drop

The IDE help (ClarionHelp.chm) carries the INSTRING start rule with a SIZE(cstring) example, the USTRING porting note, the previewer’s second latch, and a USTRING note on each of the PATH, SETPATH, LONGPATH and SHORTPATH topics.

Full tester guide — mental model, conversion rules, DCT import table, screen controls, reports, blobs, SQL / SQLite / text drivers / TopSpeedW / Memory / IP, recipes, and what to focus on when testing. The guide’s “What’s new” section lists everything in this drop; changes are also flagged inline with dated “beta refresh” notes.

Open the full Unicode Tester Guide

Report tool authors — the wide generator surface has shipped (IReportGeneratorW — six methods, opt-in, zero break for existing implementors). Format detection, the EMF record set, transition paths per integration style:

EMF Page Files — Transition Note

Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation — different behavior is exactly what we want to hear about.