Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Create a New Table in an Azure Storage Account
See more Azure Table Service Examples
Creates a new table using the Azure Table Service REST API.Chilkat Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.StringBuilder,
Chilkat.Rest,
Chilkat.AuthAzureStorage,
Chilkat.JsonObject;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
rest: TRest;
bTls: Boolean;
port: Integer;
bAutoReconnect: Boolean;
azAuth: TAuthAzureStorage;
json: TJsonObject;
sbRequestBody: TStringBuilder;
sbResponseBody: TStringBuilder;
respStatusCode: Integer;
jsonResponse: TJsonObject;
odata_metadata: string;
odata_type: string;
odata_id: string;
odata_editLink: string;
TableName: string;
begin
success := False;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
rest := TRest.Create;
// Implements the following CURL command:
// curl -X POST \
// -H "Content-Type: application/json" \
// -H "Accept: application/json;odata=fullmetadata" \
// -H "Prefer: return-content" \
// -d '{
// "TableName":"mytable"
// }' https://myaccount.table.core.windows.net/Tables
// Use the following online tool to generate REST code from a CURL command
// Convert a cURL Command to REST Source Code
// IMPORTANT: Make sure to change "myaccount" to your actual Azure Storage Account name.
// URL: https://myaccount.table.core.windows.net/Tables
bTls := True;
port := 443;
bAutoReconnect := True;
success := rest.Connect('myaccount.table.core.windows.net',port,bTls,bAutoReconnect);
if (success <> True) then
begin
WriteLn('ConnectFailReason: ' + rest.ConnectFailReason);
WriteLn(rest.LastErrorText);
Exit;
end;
// Provide Azure Cloud credentials for the REST call.
azAuth := TAuthAzureStorage.Create;
azAuth.AccessKey := 'AZURE_ACCESS_KEY';
// The account name used here should match the 1st part of the domain passed in the call to Connect (above).
azAuth.Account := 'myaccount';
azAuth.Scheme := 'SharedKey';
azAuth.Service := 'Table';
// This causes the "x-ms-version: 2019-07-07" header to be automatically added.
azAuth.XMsVersion := '2019-07-07';
success := rest.SetAuthAzureStorage(azAuth);
// Note: The application does not need to explicitly set the following
// headers: Content-Length, x-ms-date, Authorization. These headers
// are automatically set by Chilkat.
// Note: The above code does not need to be repeatedly called for each REST request.
// The rest object can be setup once, and then many requests can be sent. Chilkat will automatically
// reconnect within a FullRequest* method as needed. It is only the very first connection that is explicitly
// made via the Connect method.
// Use this online tool to generate code from sample JSON:
// Generate Code to Create JSON
// The following JSON is sent in the request body.
// {
// "TableName": "mytable"
// }
json := TJsonObject.Create;
json.UpdateString('TableName','mytable');
rest.AddHeader('Accept','application/json;odata=fullmetadata');
rest.AddHeader('Prefer','return-content');
rest.AddHeader('Content-Type','application/json');
sbRequestBody := TStringBuilder.Create;
json.EmitSb(sbRequestBody);
sbResponseBody := TStringBuilder.Create;
success := rest.FullRequestSb('POST','/Tables',sbRequestBody,sbResponseBody);
if (success <> True) then
begin
WriteLn(rest.LastErrorText);
Exit;
end;
respStatusCode := rest.ResponseStatusCode;
if (respStatusCode >= 400) then
begin
WriteLn('Response Status Code = ' + respStatusCode);
WriteLn('Response Header:');
WriteLn(rest.ResponseHeader);
WriteLn('Response Body:');
WriteLn(sbResponseBody.GetAsString());
Exit;
end;
jsonResponse := TJsonObject.Create;
jsonResponse.LoadSb(sbResponseBody);
jsonResponse.EmitCompact := False;
WriteLn(jsonResponse.Emit());
odata_metadata := jsonResponse.StringOf('"odata.metadata"');
odata_type := jsonResponse.StringOf('"odata.type"');
odata_id := jsonResponse.StringOf('"odata.id"');
odata_editLink := jsonResponse.StringOf('"odata.editLink"');
TableName := jsonResponse.StringOf('TableName');
rest.Free;
azAuth.Free;
json.Free;
sbRequestBody.Free;
sbResponseBody.Free;
jsonResponse.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.