Recital

Login Register
Recital's version of Samba allows application data to be shared and locked correctly across these systems, allowing a truly integrated heterogeneous data environment. For example Recital applications running on a UNIX/Linux server can read and update FoxPro databases residing on a Microsoft Windows NT server through the use of Samba.
You can view the modified changes by downloading the following files and patching these into your current Samba installation.
open.c (file opening and share modes)
version.h (versioning information)
The variable CPPFLAGS in the file Makefile will require the define -DRECITAL added to it.
In order to make the locking compatible between UNIX/Linux and Windows the following environment variable must be placed in the profile.db for Unix/Linux Developer and in profile.uas for the Universal Application Server:
DB_SAMBA=YES ;export DB_SAMBA 
The following settings need to be added to the smb.conf file to ensure that file names are always converted to lower case:
preserve case = no 
default case = lower 
mangle case = yes 
The following settings need to be added to the smb.conf file for locking to operate correctly:
oplocks = False
share modes = no
Published in Blogs
Read more...
In Linux you can run lsof and pipe it though grep for the files you are interested in, for example;
$ lsof | grep db.exe | grep accounts
db.exe    16897      john    6uw     REG      253,0    20012    3413872 /usr/recital100/qa/accounts.dbf
db.exe    16897      john    7u      REG      253,0     4176    3413885 /usr/recital100/qa/accounts.dbx
If you want to check for locks you can use lslk, for example;
$ lslk | grep db.exe | grep accounts
db.exe    16897 253,0 3413872 20012  w 0  0  0 12319   0 /usr/recital100/qa/accounts.dbf
If you don't have lslk installed you can install it with one of the updaters, for example on redhat linux:
$ yum update lslk

Published in Blogs
Read more...

If you have a live linux site that is running vmware virtual machines, you can pause the virtual machines when you want to perform a backup, I use acronis for linux which does incremental backups and you can specify a command to run before and after the backup, this allows backups to be performed at scheduled times daily without any intervention. In my examples below, the virtual machine i want to control is in /root/vmware/Recital/Recital.vmx

To pause the virtual machine on linux:

# vmrun pause /root/vmware/Recital/Recital.vmx


and then to unpause after the backup has completed:

# vmrun unpause /root/vmware/Recital/Recital.vmx


That is basicallty it, no need to attend the backup and it can be perfomed at a suitable time so no users are affected.

Incidentally, vmrun lets you startup a virtual machine at system startup too, without needing the GUI:

# vmrun start /root/vmware/Recital/Recital.vmx


Or alternatively stop it:

# vmrun stop /root/vmware/Recital/Recital.vmx


There are lots of other capabilities of this command, running applications inside the virtual machine etc etc. For full details just type vmrun in a terminal window.



Published in Blogs
Read more...

In this article Barry Mavin, CEO and Chief Software Architect for Recital, details Working with Stored Procedures in the Recital Database Server.

Overview

Stored procedures and user-defined functions are collections of SQL statements and optional control-of-flow statements written in the Recital 4GL (compatible with VFP) stored under a name and saved in a Database. Both stored procedures and user-defined functions are just-in-time compiled by the Recital database engine. Using the Database Administrator in Recital Enterprise Studio, you can easily create, view, modify, and test Stored Procedures, Triggers, and user-defined functions

Creating and Editing Stored Procedures

To create a new Stored Procedure,  right-click the Procedures node in the Databases tree of the Project Explorer and choose Create. To modify an existing stored procedure select the Stored Procedure in the Databases Tree in the Project Explorer by double-clicking on it or selecting Modify from the context menu . By convertion we recommend that you name your Stored Procedures beginning with "sp_xxx_", user-defined functions with "f_xxx_", and Triggers with "dt_xxx_", where xxx is the name of the table that they are associated with.

Testing the Procedure

To test run the Stored Procedure, select the Stored Procedure in the Databases Tree in the Project Explorer by double-clicking on it. Once the Database Administrator is displayed, click the Run button to run the procedure.

Getting return values

Example Stored Procedure called "sp_myproc":
parameter arg1, arg2
return arg1 + arg2
Example calling the Stored Procedure from C# .NET:
////////////////////////////////////////////////////////////////////////
// include the references below
using System.Data;
using Recital.Data;

////////////////////////////////////////////////////////////////////////
// sample code to call a Stored Procedure that adds to numeric values together
public int CallStoredProcedure()
{
	RecitalConnection conn = new 
		RecitalConnection("Data Source=localhost;Database=southwind;uid=?;pwd=?");
	RecitalCommand cmd = new RecitalCommand();
	cmd.Connection = conn;
	cmd.CommandText = "sp_myproc(@arg1, @arg2)";
	cmd.CommandType = CommandType.StoredProcedure;
	cmd.Parameters["@arg1"].Value = 10;
	cmd.Parameters["@arg2"].Value = 20;
	conn.Open();
	cmd.ExecuteNonQuery();
	int result = (int)(cmd.Parameters["retvalue"].Value);    // get the return value from the sp
	conn.Close();
	return result;
	}

Writing Stored Procedures that return a Resultset

If you want to write a Stored Procedure that returns a ResultSet, you use the SETRESULTSET() function of the 4GL. Using the Universal .NET Data Provider, you can then execute the 4GL Stored Procedure and return the ResultSet to the client application for processing. ResultSets that are returned from Stored Procedures are read-only.

Example Stored Procedure called "sp_myproc":
parameter query
select * from customers &query into cursor "mydata"
return setresultset("mydata")
Example calling the Stored Procedure from C# .NET:
////////////////////////////////////////////////////////////////////////
// include the references below
using System.Data;
using Recital.Data;

////////////////////////////////////////////////////////////////////////
// sample code to call a stored procedure that returns a ResultSet
public void CallStoredProcedure()
{
	RecitalConnection conn = new 
		RecitalConnection("Data Source=localhost;Database=southwind;uid=?;pwd=?");
	RecitalCommand cmd = new RecitalCommand();
	cmd.Connection = conn;
	cmd.CommandText = "sp_myproc(@query)";
	cmd.CommandType = CommandType.StoredProcedure;
	cmd.Parameters["@query"].Value = "where not deleted()";
	conn.Open();
	RecitalDataReader dreader = cmd.ExecuteReader();
	int sqlcnt = (int)(cmd.Parameters["sqlcnt"].Value);    // returns number of affected rows
	while (dreader.Read())
	{
		// read and process the data
	}
	dreader.Close();
	conn.Close();
}
Published in Blogs
Read more...
 
Recital provides a wide variety of connectivity solutions to external data sources. This article provides an overview.
Published in Blogs
Read more...
Unison is a file-synchronization tool for Mac, Unix/Linux and Windows. It allows two replicas of a collection of files and directories to be stored on different hosts (or different disks on the same host), modified separately, and then brought up to date by propagating the changes in each replica to the other. 

Binary distributions for Unison can be found here.

The user manual can be found here
Published in Blogs
Read more...
This MSDN article provides good details about IE CSS compatibility issues.
http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx
 
Published in Blogs
Read more...
When using Recital Web you can maintain the exact state of each cursor between pages like this.

On entry to the .rsp page.

IF type( _session["state"] ) != "U"
    m_state = _session["state"]
    RESTORE DATASESSION FROM m_state
ELSE
    // open up your tables for the first time 
ENDIF

On exit of the .rsp page.
SAVE DATASESSION TO m_state
_SESSION["state"] = m_state
Published in Blogs
Read more...

lslk lists information about locks held on files with local inodes on systems running linux.

Install it with:

yum install lslk
Published in Blogs
Read more...
Recital 10 enhanced Recital by enabling it to be used in bash shell scripts and in shell commands which use pipes and/or redirect stdin and stdout. If stdin is not redirected then recital will startup and operate as normal in a terminal window. Additionally you can use heredoc to denote a block of recital commands that should be executed. Note that when used in this manner, no UI commands can be executed and no user interaction is allowed.  
# recital < mrprog.prg 
# recital < myprog.prg > myoutput.txt
# recital > myoutput.txt <<END
use customers
list structure
END
# echo "select * from sales!customers where overdue" | recital | wc -l
Individual commands can be executed in shell scripts.
# recital -c "create database sales"
# recital -c "create table sales!invoices (id int, name char(25), due date)"
Expressions can be evaluated and used in shell scripts.
# VER=`recital -e "version(1)"`
You can view what command line options are available by typing:
# recital --help
Published in Blogs
Read more...

Copyright © 2025 Recital Software Inc.

Login

Register

User Registration
or Cancel