Build Great Data-Driven Apps | RemObjects Software
Tour Trial Pricing Docs Support |
Fast, easy and secure data access for your apps.

Data Abstract is the premier framework for building fast, secure and reliable database applications.

Using the multi-tier approach, Data Abstract lets us enforce business logic, access rights and data consistency in the server, without exposing your database directly to the network.

With its unique Schema™ model, Data Abstract lets you, cough, abstract the simple implementation details of your physical database from client applications. Use a unified data access API, no matter what database type you connect to.

Data Abstract libraries are available for a wide range of platforms and support virtually all modern database types.

Getting started with Data Abstract is easy – and gets only simpler from there.

.NET Cocoa Java Delphi JavaScript

Windows. WinRT. Windows Phone. Heck, even cross-platform Mono and Xamarin.
Data Abstract gives you easy access to your data.

C# Oxygene Swift Visual Basic Iodine
var rda = new LinqRemoteDataAdapter("https://sample.remobjects.com/bin");
var table = from c in rda.GetTable<Clients>() where c.ClientName.EndsWith("A");
foreach (Clients c in table)
{
    // work with your data
}
var lRda := new LinqRemoteDataAdapter("https://sample.remobjects.com/bin");
for each from c in lRda.GetTable<Clients> where c.ClientName.EndsWith('A') do begin
  // work with your data
end;
let rda = LinqRemoteDataAdapter("https://sample.remobjects.com/bin")
let table = rda.GetTable<Clients>().Where({!$0.ClientName.EndsWith("A")})
for c in table {
    // work with your data
}
(Use Swift on .NET with our free RemObjects Swift Compiler).
Dim rda = New LinqRemoteDataAdapter("https://sample.remobjects.com/bin")
Dim table = From c In rda.GetTable(Of Clients)() Where c.ClientName.EndsWith("A")
For Each c As Clients In table
  ' work with your data
Next
var rda = new LinqRemoteDataAdapter("https://sample.remobjects.com/bin");
var table = rda.GetTable<Clients>().Where( (c) -> c.ClientName.EndsWith("A") );
for (Clients c : table)
{
    // work with your data
}

Whether you develop for Mac, iOS, watchOS or tvOS. Whether you use Swift, Objective-C or Elements.
Access to your data has never been easier.

Swift Objective-C Oxygene RemObjects C# Iodine
let url = NSURL(string: "https://sample.remobjects.com/bin")
let rda = DARemoteDataAdapter(targetURL: url!)
rda.beginGetDataTable("Clients", withSQL: "SELECT * FROM Clients where ClientName LIKE '%A'") { table in
    // work with your data
}
NSURL *url = [NSURL URLWithstring:@"https://sample.remobjects.com/bin"];
DARemoteDataAdapter *rda = [DARemoteDataAdapter adapterWithTargetURL:url];
[rda beginGetDataTable:@"Clients"
               withSQL: @"SELECT * FROM Clients where ClientName LIKE '%A'")
        startWithBlock: ^(DADataTable *table) {
    // work with your data
}];
var lUrl := NSURL.URLWithstring('https://sample.remobjects.com/bin');
var lRda := new DARemoteDataAdapter withTargetURL(lUrl);
lRda.beginGetDataTable('Clients')
  withSQL("SELECT * FROM Clients where ClientName LIKE '%A'")
  startWithBlock( (table) -> begin
  // work with your data
end);
var url = NSURL.URLWithstring("https://sample.remobjects.com/bin");
var rda = new DARemoteDataAdapter withTargetURL(url);
rda.beginGetDataTable("Clients")
    withSQL("SELECT * FROM Clients where ClientName LIKE '%A'")
    startWithBlock( (table) => {
    // work with your data
});
var url = NSURL.URLWithstring("https://sample.remobjects.com/bin");
var rda = new DARemoteDataAdapter withTargetURL(url);
rda.beginGetDataTable("Clients")
    withSQL("SELECT * FROM Clients where ClientName LIKE '%A'")
    startWithBlock( (table) -> {
    // work with your data
});

Target Android, or any other system running on Java.
With Data Abstract, your data is only a few lines of code away.

Java Oxygene Swift RemObjects C#
URI url = URI.create( "https://sample.remobjects.com/bin");
RemoteDataAdapter rda = new RemoteDataAdapter(url);
DataTable table = new DataTable("Clients");
rda.fillWithSqlAsync(table, "SELECT * FROM Clients where ClientName LIKE '%A'", null,
                     new FillRequestTask.Callback() {
    @Override
    public void completed(final FillRequestTask aTask, Object aState) {
        // work with your data
    }
}).execute();
var lUrl := URI.create('https://sample.remobjects.com/bin');
var lRda := new RemoteDataAdapter(lUrl);
var lTable := new DataTable('Clients');
lRda.fillWithSqlAsync(lTable, "SELECT * FROM Clients where ClientName LIKE '%A'", nil, (aTask: FillRequestTask; aState: Object) -> begin
  // work with your data
end)).execute();
let url = URI.create("https://sample.remobjects.com/bin")
let rda = RemoteDataAdapter(url)
let table = DataTable("Clients")
rda.fillWithSqlAsync(table, "SELECT * FROM Clients where ClientName LIKE '%A'", nil, { (aTask, aState) in
    // work with your data
}).execute()
(Use Swift on Java and Android with our free RemObjects Swift Compiler).
var url = URI.create("https://sample.remobjects.com/bin")
var rda = new RemoteDataAdapter(url);
var table = new DataTable("Clients");
rda.fillWithSqlAsync(table, "SELECT * FROM Clients where ClientName LIKE '%A'", nil, (aTask, aState) => {
    // work with your data
}).execute()

Safely connect to your database with Data Abstract.
From VCL and FireMonkey Apps on Windows, Mac, Android and iOS.

Delphi Language C++Builder
rda := TDARemoteDataAdapter.Create(nil);
rda.TargetURL: = 'https://sample.remobjects.com/bin';
table := TDAMemDataTable.Create(nil);
rda.FillWithDASql(table,'SELECT * FROM Clients where ClientName LIKE ''%A''', nil);
// work with your data
table.Free;
rda.Free;
TDARemoteDataAdapter *rda = new TDARemoteDataAdapter(NULL);
TDAMemDataTable *table = new TDAMemDataTable(NULL);
rda->TargetURL = "https://sample.remobjects.com/bin";
rda->FillWithDASql(table,"SELECT * FROM Clients where ClientName LIKE '%A'",NULL);
 // work with your data

Your Data. In the Browser.
It's never been easier than with Data Abstract.

JavaScript
var rda = new RemObjects.DataAbstract.RemoteDataAdapter(serviceUrl, "DataService");
var table = new RemObjects.DataAbstract.DataTable("clients");
adapter.getSQLData(table, "SELECT * FROM Clients where ClientName LIKE '%A'", function() {
    // work with your data
}, RemObjects.UTIL.showError);


Data Abstract makes it easy to build database-driven applications for all major platforms.

Benefits of Data Abstract

Data Abstract uses a multi-tier approach to data access, making data access easy, fast and secure for the modern online world.

On the server tier, you have full control over how data is accessed and modified, making sure that client applications cannot bypass your rules or leave data in an inconsistent state. And all of that without having to write and maintain a server application yourself.

In your client application, Data Abstract provides a simple yet flexible API that makes it easy to request data, modify it, and send it back to the server – right away or later on. All without messing with HTTP requests, REST or similar low-level implementation details.

Data Abstract lets you use briefcase files to make data available in your local app, even when the user is not connected to the network. You can even let the user make changes to the data, and upload them at a later time.

Data Abstract also completely abstracts away the nitty gritty details of working with various database back-ends. While you can get your hands dirty and for example write custom SQL queries on the server, your client apps will stay completely database agnostic.


Data Abstract for
.NET

Data Abstract for
Delphi

Data Abstract for
Cocoa

Data Abstract for
Java & Android

Data Abstract for
JavaScript

Data Abstract makes it easy to access data from your apps, no matter what platform you are targeting, or what development tool you are using.

To achieve that, Data Abstract was designed fresh for each of the five development platforms it supports – .NET, Cocoa, Java, JavaScript and Delphi.

All editions of Data Abstract follow a common design pattern around a few core classes such as a Remote Data Adapter and Data Tables, but the infrastructure is implemented natively on each platform, so you don't have to deal with .NET-isms when working in Xcode, or with Java-isms when working on .NET, and so on.

And it goes without saying that no matter what platform(s) you write client apps for, they can all seamlessly communicate with the same server.

What is Data Abstract?

The 30 Seconds TL;DR Video:

The Databases

With its flexible driver architecture, Data Abstract allows your application to talk to virtually any relational database system available. Support for common database vendors is provided in the box both with Data Abstract for .NET and Delphi, as well as with Relativity Server. And hooking up new or more esoteric database types is easily done.

And because Data Abstract is a true multi-tier system, no database client libraries are required on the client, of course, allowing for true thin-client deployment on all the supported platforms, and keeping your database safely tucked behind your firewall.

Microsoft SQL Server | Oracle | PostgreSQL | MySQL | Interbase

SQLite | Firebird | DBISAM | NexusDB | SQL Azure | Elevate DB

and many more

Watch a Video to Get Started


Intro to Data Abstract for .NET (8:51)

View on RemObjects TV | View on YouTube

Intro to Data Abstract for Delphi (8:41)

View on RemObjects TV | View on YouTube

What's new?    |    Forums
Close

How can we help?

Your Name:
Your Email Address:
 
Your Question:
Close

Thank you!

Your message has been sent, and someone will get back to you soon, usually within a business day.

For technical or support questions, please also check out our RemObjects Talk support forum, as well as out other Support Options.