08-04-2026, Saat: 23:01
(Son Düzenleme: 09-04-2026, Saat: 15:47, Düzenleyen: adelphiforumz.)
Selamlar
FDStoredProc1 ile SQL uzerinde Table-Type parametresi olan bir Procedure nasıl parametre gecilir.
FDStoredProc1 ile SQL uzerinde Table-Type parametresi olan bir Procedure nasıl parametre gecilir.
Kod: (Select All)
IF NOT EXISTS (SELECT 1 FROM sys.types WHERE is_table_type = 1 AND name = 'UDTT_Test')
BEGIN
CREATE TYPE dbo.UDTT_Test AS TABLE(
SiraNo INT NULL
);
END
GO
if exists (select * from sys.objects where type = 'P' AND name = 'UTP_Test')
drop procedure UTP_Test
go
Create procedure [dbo].[UTP_Test]
@Liste UDTT_Test READONLY
as
begin
Select * from @Liste L order by L.SiraNo Desc
end
GO
DECLARE @Liste dbo.UDTT_Test
INSERT INTO @Liste (SiraNo)
VALUES (1), (2), (3);
EXEC UTP_Test @Liste = @Liste;
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,
FireDAC.Phys, FireDAC.Phys.MSSQL, FireDAC.Phys.MSSQLDef, FireDAC.VCLUI.Wait, FireDAC.Stan.Param,
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt,
Data.DB, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, FireDAC.Comp.DataSet, FireDAC.Comp.Client;
type
TForm1 = class(TForm)
FDConn: TFDConnection;
FDSP: TFDStoredProc;
DSSP: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
LTable: TFDMemTable;
begin
LTable := TFDMemTable.Create(nil);
try
// TVP yapısını Delphi tarafında oluştur
LTable.FieldDefs.Clear;
LTable.FieldDefs.Add('SiraNo', ftInteger);
LTable.CreateDataSet;
LTable.Open;
// Test verileri
LTable.Append;
LTable.FieldByName('SiraNo').AsInteger := 1;
LTable.Post;
LTable.Append;
LTable.FieldByName('SiraNo').AsInteger := 2;
LTable.Post;
// Stored Procedure ayarı
FDSP.Close;
FDSP.Unprepare;
FDSP.StoredProcName := 'dbo.UTP_Test;1';
// Parametreleri otomatik türetmek yerine elle tanımla
FDSP.FetchOptions.Items := FDSP.FetchOptions.Items - [fiMeta];
FDSP.Params.Clear;
with FDSP.Params.Add do
begin
Name := '@Liste';
ParamType := ptInput;
ArrayType := atTable;
DataType := ftDataSet;
DataTypeName := 'dbo.UDTT_Test'; // SQL Server TYPE adı
end;
FDSP.ParamByName('@Liste').AsDataSet := LTable;
FDSP.Open;
finally
LTable.Free;
end;
end;
end.
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 563 ClientWidth = 840 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -12 Font.Name = 'Segoe UI' Font.Style = [] TextHeight = 15 object DBGrid1: TDBGrid Left = 47 Top = 88 Width = 545 Height = 153 DataSource = DSSP TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -12 TitleFont.Name = 'Segoe UI' TitleFont.Style = [] end object Button1: TButton Left = 120 Top = 272 Width = 105 Height = 25 Caption = 'Button1' TabOrder = 1 OnClick = Button1Click end object FDConn: TFDConnection LoginPrompt = False Left = 192 Top = 24 end object FDSP: TFDStoredProc Connection = FDConn Left = 285 Top = 25 end object DSSP: TDataSource DataSet = FDSP Left = 381 Top = 25 end end
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.

