{"id":2010,"date":"2026-09-25T17:24:00","date_gmt":"2026-09-25T17:24:00","guid":{"rendered":"https:\/\/clarionsharp.com\/blog\/?p=2010"},"modified":"2026-09-25T17:24:00","modified_gmt":"2026-09-25T17:24:00","slug":"clarion-unicode-preview-beta-refresh-build-14373","status":"publish","type":"post","link":"https:\/\/clarionsharp.com\/blog\/clarion-unicode-preview-beta-refresh-build-14373\/","title":{"rendered":"Clarion Unicode preview \u2014 beta refresh build 14373"},"content":{"rendered":"\n<style>\n.ustring-wp4 { --u-fg:#1c1917; --u-muted:#6b6560; --u-line:#e2dcd3; --u-card:#fff; --u-soft:#dbeafe; --u-accent:#1d4ed8; --u-bg:#f7f5f1; --u-link:#0b5cad; font-family:system-ui,-apple-system,\"Segoe UI\",sans-serif; color:var(--u-fg); line-height:1.55; max-width:1080px; margin:0 auto; }\n@media (prefers-color-scheme: dark) {\n  .ustring-wp4 { --u-fg:#f5f5f4; --u-muted:#a8a29e; --u-line:#3f3a36; --u-card:#1c1917; --u-soft:#1e3a5f; --u-accent:#93c5fd; --u-bg:#121110; --u-link:#7dd3fc; }\n}\n.ustring-wp4 * { box-sizing:border-box; }\n.ustring-wp4 .uw-hero { background:linear-gradient(135deg,#0f2a44 0%,#1e3a5f 45%,#14532d 100%); color:#fafaf9; border-radius:14px; padding:1.75rem 1.5rem 1.5rem; margin:0 0 1.25rem; }\n.ustring-wp4 .uw-eyebrow { display:inline-block; font-size:.72rem; letter-spacing:.12em; text-transform:uppercase; color:#93c5fd; font-weight:700; margin-bottom:.55rem; }\n.ustring-wp4 .uw-hero h2 { margin:0 0 .65rem; font-size:clamp(1.45rem,3.5vw,2rem); line-height:1.2; letter-spacing:-.02em; color:#fafaf9; }\n.ustring-wp4 .uw-hero p { margin:0; color:#e7e5e4; font-size:1.05rem; max-width:42rem; }\n.ustring-wp4 .uw-pills { display:flex; flex-wrap:wrap; gap:.4rem; margin-top:1rem; }\n.ustring-wp4 .uw-pill { display:inline-block; padding:.3rem .7rem; border-radius:999px; background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.12); color:#fafaf9; font-size:.82rem; }\n.ustring-wp4 .uw-pill strong { color:#bfdbfe; font-weight:650; }\n.ustring-wp4 .uw-lead { color:var(--u-muted); margin:0 0 1.1rem; font-size:1rem; }\n.ustring-wp4 .uw-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:.85rem; margin:0 0 1.5rem; }\n.ustring-wp4 .uw-card { background:var(--u-card); border:1px solid var(--u-line); border-radius:14px; padding:1rem 1.05rem 1.1rem; }\n.ustring-wp4 .uw-icon { width:2rem; height:2rem; border-radius:10px; display:grid; place-items:center; background:var(--u-soft); color:var(--u-accent); font-weight:700; margin-bottom:.55rem; font-size:1rem; }\n.ustring-wp4 .uw-card h3 { margin:0 0 .35rem; font-size:1rem; letter-spacing:-.01em; color:var(--u-fg); }\n.ustring-wp4 .uw-card p { margin:0; color:var(--u-muted); font-size:.92rem; line-height:1.5; }\n.ustring-wp4 code { font-family:Consolas,\"Cascadia Mono\",ui-monospace,monospace; font-size:.88em; background:var(--u-bg); border:1px solid var(--u-line); border-radius:5px; padding:.05em .3em; color:var(--u-fg); overflow-wrap:anywhere; word-break:break-word; }\n.ustring-wp4 .uw-card { min-width:0; overflow-wrap:anywhere; }\n.ustring-wp4 .uw-cta { background:var(--u-card); border:1px solid var(--u-line); border-left:4px solid var(--u-accent); border-radius:12px; padding:1rem 1.15rem; }\n.ustring-wp4 .uw-cta p { margin:0 0 .65rem; color:var(--u-muted); }\n.ustring-wp4 .uw-cta p:last-child { margin:0; }\n.ustring-wp4 .uw-btn { display:inline; background:none; color:var(--u-link) !important; text-decoration:underline !important; font-weight:650; padding:0; border-radius:0; margin-top:.15rem; }\n.ustring-wp4 .uw-btn:hover { color:var(--u-accent) !important; text-decoration:underline !important; }\n.ustring-wp4 .uw-note { font-size:.88rem; color:var(--u-muted); margin-top:.75rem; }\n<\/style>\n\n<div class=\"ustring-wp4\">\n  <div class=\"uw-hero\">\n    <div class=\"uw-eyebrow\">Clarion \u00b7 Unicode Preview \u00b7 Beta Refresh<\/div>\n    <h2>Refresh build 14373 \u2014 lost SQL connections re-establish themselves, SQL browses fetch faster, and the help gains a &#8220;How do I&#8221; chapter<\/h2>\n    <p>\n      A SQL drop. Lost server connections now automatically re-establish the connection\n      to the server and the application continues gracefully: a VPN reconnect, a firewall\n      that closed the session, a laptop that woke up \u2014 the files and views stay open, the\n      next operation reconnects, a browse that was paging simply keeps paging. Two new\n      browse prompts fetch a SQL page in one round trip instead of one row per trip, with\n      a BLOB in the page up to 10x faster on SQL Server. A SQL connection configures itself\n      from the OWNER string alone, no DSN on the user&#8217;s machine. The IDE&#8217;s &#8220;select a folder&#8221;\n      is the modern Windows folder dialog everywhere. And the F1 help has a &#8220;How do I &#8230;&#8221;\n      chapter with a task topic for every section of the tester guide, every topic in the\n      Index. Plus the fixes and additions from beta testers&#8217; reports in the forums: Known\n      Folders, the wide CLIB twins, a two-picture DateTime format, a friendlier previewer.\n      Already testing? Everything below is new since build 14313.\n    <\/p>\n    <div class=\"uw-pills\">\n      <span class=\"uw-pill\"><strong>SQL<\/strong> automatic reconnect \u00b7 &#8216;Page fetch size (SQL)&#8217; \u00b7 &#8216;BLOB fetch (SQL)&#8217; \u00b7 PROP:BlobFetch \u00b7 DSN-less connect<\/span>\n      <span class=\"uw-pill\"><strong>IDE<\/strong> the modern select-folder dialog on every &#8220;&#8230;&#8221;<\/span>\n      <span class=\"uw-pill\"><strong>Help<\/strong> &#8220;How do I &#8230;&#8221; chapter \u00b7 every topic indexed \u00b7 Customizing a SQL Connection<\/span>\n      <span class=\"uw-pill\"><strong>Compiler<\/strong> USTRING link names sz \/ z \u2014 rebuild multi-DLL solutions together<\/span>\n      <span class=\"uw-pill\"><strong>From the forums<\/strong> Known Folders \u00b7 CLIB wide twins + RmDirW \u00b7 Pict(dt, pic1, sep, pic2) \u00b7 previewer Jump \/ sidebar \u00b7 varchar(max) as BLOB \u00b7 BLOB hot fields \u00b7 VALUE() \/ PROP:Value \/ SPIN FROM wide \u00b7 PROP:FromQueue \u00b7 Designer paints &lt;13,10&gt;<\/span>\n    <\/div>\n  <\/div>\n\n  <p class=\"uw-lead\">\n    Highlights of this drop \u2014 then the full tester guide, whose\n    <em>&#8220;What&#8217;s new&#8221;<\/em> section lists everything that changed since you last read it.\n  <\/p>\n\n  <div class=\"uw-grid\">\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u21bb<\/div>\n      <h3>Lost server connections re-establish themselves, the application continues<\/h3>\n      <p>\n        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&#8217;s own message (<code>FILEERRORCODE()<\/code> = <code>08S01<\/code>), and the next operation reconnects by itself \u2014 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 <code>RESET<\/code> to its last position.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u226b<\/div>\n      <h3>SQL browses fetch a page per round trip \u2014 two new prompts<\/h3>\n      <p>\n        BrowseBox \u203a Actions \u203a Default Behavior, both chains. <strong>&#8216;Page fetch size (SQL)&#8217;<\/strong>: a value n fetches n rows per server round trip (ABC sets <code>BRWn.PageSize<\/code>, the Clarion chain emits <code>BUFFER(view, n, 2, 0, 60)<\/code>); a Clarion-chain SQL browse moves from one row per trip to n. <strong>&#8216;BLOB fetch (SQL)&#8217;<\/strong> with the new <code>PROP:BlobFetch<\/code>: a browse that shows a BLOB keeps its page fetch \u2014 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&#8217;s from the very first read, so a TEXT or IMAGE bound to a browse hot-field BLOB follows the highlight bar.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u25eb<\/div>\n      <h3>AppGen: a BLOB can be a browse hot field<\/h3>\n      <p>\n        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&#8217;s VIEW as a <code>PROJECT<\/code> and never into the queue (a queue cannot <code>LIKE()<\/code> a BLOB), and the highlighted row is re-fetched on every selection change, so the control always shows the current row&#8217;s blob. Both template chains, no hand code.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">&#x2699;<\/div>\n      <h3>A SQL connection configured from the OWNER string alone<\/h3>\n      <p>\n        The <code>UNICODECONNECT<\/code> 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&#8217;s machine. The new help topic <strong>&#8220;Customizing a SQL Connection&#8221;<\/strong> lays out the three layers \u2014 the OWNER string, the driver string switches, the ODBC driver&#8217;s own settings \u2014 with a copy-ready example for each. Over a slow link to SQL Server, <code>\/MULTIPLEACTIVERESULTSETS=TRUE<\/code> streams the rows instead of a server cursor round trip per fetch block; the guide&#8217;s SQL section says when to use it.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u25a3<\/div>\n      <h3>The IDE picks folders with the modern dialog<\/h3>\n      <p>\n        Every &#8220;&#8230;&#8221; in the IDE that asks for a folder \u2014 New Project&#8217;s Location, the default project location in Options, Find in Files&#8217; Look in, the project option folders \u2014 opens the Windows common item dialog in folder mode: the navigation bar, search, the places on the left, a &#8220;New folder&#8221; button, resizable. The small &#8220;Browse For Folder&#8221; tree is gone from the IDE. The most reported request of the beta, inside and outside.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u2302<\/div>\n      <h3>Known Folders: Downloads, Documents, AppData and every other one, by name<\/h3>\n      <p>\n        <code>SpecialFolder.GetKnownDir(KF:Downloads)<\/code> returns the user&#8217;s Downloads folder, the one the CSIDL list never had. <code>KNOWNFOLDER.EQU<\/code> declares the common KNOWNFOLDERIDs as <code>KF:<\/code> equates \u2014 Downloads, Documents, Desktop, Pictures, Music, Videos, LocalAppData, RoamingAppData, ProgramData, Profile, Fonts, ProgramFiles, ProgramFilesX86, Startup, the Public ones \u2014 and any other folder from KnownFolders.h is one more equate written the same way. <code>GetKnownDir(KF:Documents, 'MyApp')<\/code> appends your sub-directory, the path comes back as a USTRING so a folder outside the ANSI code page is exact, and <code>GetKnownError()<\/code> holds the HRESULT of the last call. The CSIDL methods you already use are unchanged.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u271a<\/div>\n      <h3>Wide CLIB twins, a two-picture DateTime, a friendlier Report previewer<\/h3>\n      <p>\n        CLIB.CLW declares the wide twins <code>FnSplitW<\/code>, <code>FnMergeW<\/code>, <code>MkDirW<\/code>, <code>AccessW<\/code> and the new <code>RmDirW<\/code>, so a program that includes CLIB.CLW calls them by name. <code>DateTimeUtil.Pict(dt, '@D10-', 'T', '@T04')<\/code> joins two pictures with a separator \u2014 an ISO stamp, a file-name stamp \u2014 in one call. The report previewer&#8217;s Jump to a Page shows &#8220;of N pages&#8221;, clamps a typed number, and has First \/ Last buttons; the thumbnail sidebar&#8217;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 <code>VALUE()<\/code> on a CHECK or RADIO lands in the USE variable with its exact units, <code>{PROP:Value}<\/code> on any captioned control and a SPIN&#8217;s wide <code>FROM()<\/code> deliver exact units too, and <code>CONTENTS(?Combo)<\/code> answers for a COMBO without a USE variable. And the Window and Report Designers paint <code>&lt;13,10&gt;<\/code>, every decimal metachar and <code>{n}<\/code> repeats exactly like the compiled window.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">?<\/div>\n      <h3>F1 help: a &#8220;How do I &#8230;&#8221; chapter, every topic in the Index<\/h3>\n      <p>\n        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 &#8230;), each linking to the reference topics it needs. The Index finds them by title and by the words you would type \u2014 &#8220;lost connection&#8221;, &#8220;reconnect&#8221;, &#8220;faster SQL browse&#8221;. Every topic in the help now carries its title and chapter as index keywords, the 2026 reference topics carry a &#8220;See also&#8221; line, and the new browse prompts are documented where F1 on the prompt lands.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u270e<\/div>\n      <h3>From beta testers&#8217; reports: dictionary, AppGen, DATETIME, previewer<\/h3>\n      <p>\n        <code>varchar(max)<\/code> imports as a BLOB, so the whole column travels (it joins <code>text<\/code>, <code>ntext<\/code>, <code>nvarchar(max)<\/code> and <code>varbinary(max)<\/code> under one rule). <code>DateTimeUtil<\/code> builds from LibSrc alone and gains <code>Pict(dt, picture)<\/code> \u2014 the date part through <code>@D4<\/code>, the time part through <code>@T4<\/code>, the whole value through <code>@DT<\/code>. The Window Previewer&#8217;s generated program reads better and compiles every time, with <code>@DT<\/code> controls primed with a real date-time sample.\n      <\/p>\n    <\/article>\n\n    <article class=\"uw-card\">\n      <div class=\"uw-icon\">\u0192<\/div>\n      <h3>USTRING link names of their own \u2014 rebuild multi-DLL solutions together<\/h3>\n      <p>\n        USTRING parameters now mangle as <code>sz<\/code> (every non-RAW form) and <code>z<\/code> (RAW), a link name no other type can produce, so a <code>*USTRING<\/code> and a <code>*SHORT,ANY<\/code> 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 <code>zu<\/code>\/<code>su<\/code> lines changes them to <code>sz<\/code>; Pro2Exp \/ Exp2Map users update the letter table.\n      <\/p>\n    <\/article>\n\n  <\/div>\n\n  <div class=\"uw-cta\">\n    <p>\n      <strong style=\"color:var(--u-fg)\">Full tester guide<\/strong> \u2014\n      mental model, conversion rules, DCT import table, screen controls, reports, blobs,\n      SQL \/ SQLite \/ text drivers \/ TopSpeedW \/ Memory \/ IP, recipes, the new-language-surface\n      quick reference, and what to focus on when testing. The guide&#8217;s <em>&#8220;What&#8217;s new&#8221;<\/em>\n      section lists everything in this drop, and every section has its task topic in the\n      F1 help&#8217;s &#8220;How do I &#8230;&#8221; chapter.\n    <\/p>\n    <!-- >>> confirm these URLs match the deployed static docs <<< -->\n    <a class=\"uw-btn\" href=\"https:\/\/softvelocity.com\/docs\/Clarion-Unicode-Tester-Guide.html\" target=\"_blank\" rel=\"noopener\">Open the full Unicode Tester Guide<\/a>\n    <p style=\"margin:.85rem 0 .35rem; color:var(--u-muted)\">\n      <strong style=\"color:var(--u-fg)\">Report tool authors<\/strong> \u2014\n      the wide generator surface (<code>IReportGeneratorW<\/code>), format detection, the\n      EMF record set, transition paths per integration style, and the\n      <code>PageTextIndexClass<\/code> text index the previewer searches with:\n    <\/p>\n    <a class=\"uw-btn\" href=\"https:\/\/softvelocity.com\/docs\/Clarion-Unicode-EMF-Transition-Note.html\" target=\"_blank\" rel=\"noopener\">EMF Page Files \u2014 Transition Note<\/a>\n    <p class=\"uw-note\">\n      Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation \u2014\n      if you see something different, the beta forum is the place.\n    <\/p>\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Clarion \u00b7 Unicode Preview \u00b7 Beta Refresh Refresh build 14373 \u2014 lost SQL connections re-establish themselves, SQL browses fetch faster, and the help gains a &#8220;How do I&#8221; 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 &hellip; <a href=\"https:\/\/clarionsharp.com\/blog\/clarion-unicode-preview-beta-refresh-build-14373\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Clarion Unicode preview \u2014 beta refresh build 14373<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,5],"tags":[45,54,29,49],"class_list":["post-2010","post","type-post","status-publish","format-standard","hentry","category-clarion-12","category-clarionnews","tag-clarion-12","tag-clarion-beta-refresh-unicode","tag-templates","tag-ustring"],"_links":{"self":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/2010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/comments?post=2010"}],"version-history":[{"count":1,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/2010\/revisions"}],"predecessor-version":[{"id":2011,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/2010\/revisions\/2011"}],"wp:attachment":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/media?parent=2010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/categories?post=2010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/tags?post=2010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}