26
Delphi Programming There are only 10 types of people in the world: Those who understand binary, and those who don’t. Search Keywords Home TObject.Create Hakkında Ziyaretçi Defteri .Net Posted by Tuğrul HELVACI - Haziran 21, 2009 Comments 15 Win32 & .Net(Delphi->C#) Aslında herşey Java adı verilen programlama dilinin doğuşuna kadar ilerliyor. Java, programlama dünyasına farklı bir perspektif katmıştı. Yazılan kodların applet’ler vasıtası ile web ortamlarında kullanılabilmesi yada Java Runtime ile değişik işletim sistemi platformlarında çalıştırılabiliyor olması onu günden güne daha popüler hâle getiriyordu. Microsoft, kendi işletim sistemlerinin yeryüzündeki tüm bilgisayarlarda kullanılamayacağının farkına vardığında; Java’ya karşı bir önlem almak gerektiğini düşündü ve bu sayede veriye her ortamdan erişebilecek bir sistem planlamaya başladı. Ancak elbette Java’nın da hâla beceremediği gibi Microsoft’da platform bağımsızlığı hususunda başarılı olamadı. Zaten tasarımların gereği de bunu pek mümkün kılmıyordu. Java’da üretilen kodların bytecode’lara çevrilmesi ve JVM(Java Virtual Machine) adı verilen programlarla üzerinde çalıştığı platforma adapte edilmesindeki süreç, .Net’de de kendisine farklı isimlerle yer buldu. .Net, ürettiği MSIL kodunu üzerinde çalıştığı platformun anlayacağı makina dili koduna ise JIT vasıtası ile çevirir. Bu tıpkı Java’nın JVM’ine benzer. Aradaki benzerlikleri saymaya kalksak emin olun sayfalarca yazı yazmamız gerekir. Benim bu makalede amacım bu iki platform bağımsız olduğunu iddia eden teknolojinin benzerliklerini ve farklılıklarını anlatmak değil. Bu Plugin WP FlashTime by horoscop 2009.org requires Flash Player 8 or better currency converter calculator.Plugin creat de horoscop | horoscop saptamanal | horoscop zilic | horoscop | play sonic games Etiketler Absolute Abstract Classes ActionScript Algoritma API Bug Byte Arrays Class Reference CloseHandle COM CreateDesktop CreateEvent CreateMutex CreateProcess CreateRemoteThread CreateSemaphore CreateToolHelp32SnapShot CreateWaitableTimer DeleteCriticalSection delphi 2010 DTS EnterCriticalSection EnumDesktopProc EnumDesktops Flash Function Contact Me | Subscribe PDFmyURL.com

D e l p hi P r o gr a mmi ng Search Keywords€¦ · API Bug Byte Arrays Class Reference CloseHandle ... CreateProcess CreateRemoteThread CreateSemaphore CreateToolHelp32SnapShot

Embed Size (px)

Citation preview

D e l p h i P r o g r a m m i n gThere are only 10 types of people in the world Those who understand binary and thosewho donrsquot

Search Keywords

HomeTObjectCreate

Hakkında Ziyaretccedili Defteri

Net Posted by Tuğrul HELVACI - Haziran 21 2009 Comments 15

Win32 amp Net(Delphi-gtC)

Aslında herşey Java adı verilen programlama dilinin doğuşuna kadar ilerliyor Javaprogramlama duumlnyasına farklı bir perspektif katmıştı Yazılan kodların appletrsquoler vasıtası ile webortamlarında kullanılabilmesi yada Java Runtime ile değişik işletim sistemi platformlarındaccedilalıştırılabiliyor olması onu guumlnden guumlne daha popuumller hacircle getiriyordu

Microsoft kendi işletim sistemlerinin yeryuumlzuumlndeki tuumlm bilgisayarlarda kullanılamayacağınınfarkına vardığında Javarsquoya karşı bir oumlnlem almak gerektiğini duumlşuumlnduuml ve bu sayede veriye herortamdan erişebilecek bir sistem planlamaya başladı Ancak elbette Javarsquonın da hacirclabeceremediği gibi Microsoftrsquoda platform bağımsızlığı hususunda başarılı olamadı Zatentasarımların gereği de bunu pek muumlmkuumln kılmıyordu Javarsquoda uumlretilen kodların bytecodersquolaraccedilevrilmesi ve JVM(Java Virtual Machine) adı verilen programlarla uumlzerinde ccedilalıştığı platformaadapte edilmesindeki suumlreccedil Netrsquode de kendisine farklı isimlerle yer buldu

Net uumlrettiği MSIL kodunu uumlzerinde ccedilalıştığı platformun anlayacağı makina dili koduna ise JITvasıtası ile ccedilevirir Bu tıpkı Javarsquonın JVMrsquoine benzer Aradaki benzerlikleri saymaya kalksakemin olun sayfalarca yazı yazmamız gerekir Benim bu makalede amacım bu iki platformbağımsız olduğunu iddia eden teknolojinin benzerliklerini ve farklılıklarını anlatmak değil Bu

Plugin WP FlashTime by horoscop 2009orgrequires Flash Player 8 or better currency

converter calculatorPlugin creat de horoscop |horoscop saptamanal | horoscop zilic | horoscop

| play sonic games

Etiketler

Absolute Abstract Classes ActionScript Algoritma

API Bug Byte Arrays Class Reference CloseHandle

COM CreateDesktop CreateEvent CreateMutexCreateProcess CreateRemoteThread CreateSemaphoreCreateToolHelp32SnapShot CreateWaitableTimerDeleteCriticalSection delphi 2010 DTS EnterCriticalSectionEnumDesktopProc EnumDesktops Flash Function

Contact Me | Subscribe

PDFmyURLcom

bilgileri genel kuumlltuumlr amacı ile sunduktan sonra Delphirsquonin bu teknolojiler ile iletişimi hakkındabilgi vermek ve gerccedilek platform bağımsız kodlamanın gelecekte Delphi ileolabileceğinin umudunu sizlerle paylaşmak

Goumlruumllduumlğuuml uumlzere gerek Net gerekse de Java platform bağımsız native kod geliştiremiyorlarUumlrettikleri ara kodların ccedileşitli işletim sistemlerinde yorumlanıp makina koduna ccedilevrilmelerigerekiyor Dolayısı ile teoride bu teknolojileri kullanan uygulamaların native uygulamalardanhızlı olması beklenmiyor

Net bilindiği uumlzere programlama dillerinden bağımsız bir platform Framework adı verilen kodkuumltuumlphanelerinin tuumlm programlama dilleri tarafından ortak bir şekilde kullanılabilmesi CTSdenilen ortak tip sınıflarının Net iccedilinde olması herhangi bir Net destekli dilin bir diğer Netdestekli dil ile iletişimini son derece sorunsuz ve kolay hale getirmekte Buumlyuumlk ccedilaplı projeekiplerinin pek ccedilok programcıya sahip olduğu gerccedileği goumlz oumlnuumlne alındığında bu ekip uumlyelerininherhangi bir Net dilini bilmesi ve bu dil ile geliştirme yapmasının projeye olumsuz bir etkisininolmaması elbette son derece guumlzel bir durum

Net Framework adı verilen kaba tabiri ile programlama kuumltuumlphanesi şu aşamada 35versiyonunda bulunuyor Yakın bir zamanda 40 versiyonunun ccedilıkması bekleniyor Bildiğimkadarı ile Frameworkrsquoteki sınıf tasarımları Net framework 20primedan sonra herhangi bir değişikliğeuğramadı Sadece uumlzerine yeni yetenekler eklendi Kısaca Net terminolojisinden bahsettiktensonra Delphirsquonin bu terminolojiye hangi mesafede olduğu hakkında yazmak isterim

Delphi 7 hacircla pek ccedilok Delphi kullanıcısının kullandığı ana IDE durumunda Bunun stabilite vehız gibi pek ccedilok etkenleri var Delphi gerccedilek anlamda Net ile 8 versiyonunda buluştu AncakDelphi 8 Microsoftrsquoun Net teknolojisine ilk desteği veren uumlruumln olduğu iccedilin hiccedilte stabil değildive Delphi severler tarafından pek de tutulmadı Ardından Borland Net platformuna desteğiniDelphi 2005 ile suumlrduumlrduuml Ancak kişisel tecruumlbelerim ile soumlyleyebilirim ki o da gerektiği oumllccediluumldestabil değildi ve pek ccedilok sorunu vardı Net desteği 2006 ve 2007 suumlruumlmlerine kadar devam ettive ardından buumlyuumlk bir değişim ile karşılaştık

Borland programlama uumlruumlnlerini CodeGear isimli firmaya devretmiş ve ardından bu uumlruumlnleriEmbarcadero isimli bir firma satın almıştı Bu suumlreccedilte artık Delphi ve diğer programlamaortamlarının Netrsquoe destek vermemesine karar verildi Bu son derece yerinde bir karardı Delphihayata ilk geldiği 1995 yılından bu zamana kadar native uygulama geliştirme konusundaduumlnyada pek ccedilok kez oumlduumll almış bir ortam iken Net framework desteği adına adeta kendikendine intihar etme kararı almıştı

Guumlnuumlmuumlzde Net programlama adına Delphi yazım tarzına aşina olan programcıların DelphiPrism uumlruumlnuumlnuuml tercih etmesi isteniyor Bu uumlruumln Net framework ortamına 100 destek verenve Delphi yazım tarzına son derece benzeyen Embarcadero firması programlama ortamlarıailesinin bir başka uumlruumlnuuml

Embarcadero Delphi uumlruumlnuumlnuuml satın aldıktan sonra beklentilerimizin aksine bu uumlruumln ailesineson derece oumlnem verdi ve uumlruumlnuumln eskide olduğu gibi popuumllerliğini yeniden kazanmasındabuumlyuumlk katkı sağlamaya başladı Bu konuda sevgili arkadaşımız Sadettin POLATrsquoın sitesindekimakaleyi okumanızı oumlneriyorum

EnumDesktopProc EnumDesktops Flash FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoGetThreadContext GetTickCount GetTickCount64Hacking Inheritance InitializeCriticalSectionInterface InterlockedCompareExchangeInterlockedDecrement InterlockedExchangeInterlockedExchangeAdd InterlockedIncrementJavaScript LeaveCriticalSection Method PointerModule32First Module32Next MSSQL OpenDesktopOpenEvent OpenMutex OpenSemaphoreOpenWaitableTimer Operator Overloading PersistancePointer Procedure Pointer ProcessProcess32First Process32Next Query QueryInterfaceQueryPerformanceCounter Queue ReleaseMutexReleaseSemaphore Reqursion ResetEvent ResumeThreadRTTI SetEvent SetProcessWorkingSetSizeSetThreadContext SetWaitableTimer Smilarity SORT SQLSQL Server Stream SuspendThread Sw itchDesktopTDateTime TerminateProcess TerminateThread

Thread TInterfacedObject TValue UntypedParameters VirtualAllocEx VirtualFreeEx

WaitForMultipleObjects WaitForSingleObjectWeaver WriteProcessMemory _AddRef _Release

WP Cumulus Flash tag cloud by Roy Tanckrequires Flash Player 9 or better

Son Yorumlar

Yeni Veri Tipleri ve Operator Overloading iccedilinTuğrul HELVACIYeni Veri Tipleri ve Operator Overloading iccedilinZafer CcedilelenkDelphi ve Google Maps API iccedilin TuğrulHELVACIDelphi ve Google Maps API iccedilin ahmetZiyaretccedili Defteri iccedilin Tuğrul HELVACI

PDFmyURLcom

Konumuzun Win32 ve Net olması muumlnasebeti ile kısa bir zaman sonra ccedilıkması beklenenyeni Delphi suumlruumlmuumlnuumln yani Delphi Weaverrsquoın ccedilok oumlnem verdiğim bir oumlzelliğini de sizlerlepaylaşmak istiyorum Delphi Weaverrsquoın oumlzelliklerinde listelenen ancak pek ccedilok kişinin dikkatinicezbetmeyen ldquoSeamless NET ltgt Native communicationrdquo oumlzelliği eminim pek ccedilok kişininnative uygulama geliştirebilecekleri ortamlara geccedilişinde etken olacaktır Peki nedir buldquoSeamless NET ltgt Native communicationrdquo oumlzelliği

Bu oumlzellik hakkında henuumlz net bir şey soumlz konusu değil Ancak neler yapılabileceğihususunda burayı ve bu haber grubunu takip etmenizi tavsiye edebilirim

Kısaca Win32 ortamında tamamen native kod geliştirirken Net framework fonksiyonalitesineherhangi bir COM bağımlılığı olmadan 100 delphi kodları ile erişmek isterseniz bu teknoloji

tam size goumlre demektir

Atozed Softwarersquoin uumlzerinde ccedilalıştığı CrossTalk isimli uumlruumln Delphi 5672009 altından NetFrameworkrsquoe erişebilmeniz iccedilin gereken tuumlm altyapıyı sağlayacak Projenin lideri olan Chad ZHover ile yapmış olduğum goumlruumlşme neticesinde oumlğrendiğim şey ise beni daha da sevindirdiCrosTalk uumlruumlnuuml Delphi Weawer ile birlikte gelecek Yani birkaccedil paragraf oumlnce belirttiğimizldquoSeamless NET ltgt Native communicationrdquo Delphi Weaver altındaki CrossTalk uumlruumlnuumlnuumlsimgeliyor

Bu yeni teknolojinin Delphirsquonin yuumlkselmesinde buumlyuumlk bir paydaya hizmet edeceği inancınıtaşıyorum Ayrıca Delphirsquonin hedefleri arasında Cross platform code compilation olduğunu dabilmenizi istiyorum İşte gerccedilek platform bağımsız kodlama bizlerin hizmetine sunulacakDelphirsquode yazdığımız uygulamaları Windows Linux yada MacOS gibi işletim sistemleriuumlzerinde ccedilalışır halde goumlreceğiz Elbette bu Netrsquoin yada Javarsquonın yaptığı gibi değil nativederleme ile yapılacak

Tuumlm bu anlatılanlar belki de hacircla afaki kalmış olabilir CrossTalkrsquoın yahut Delphi Weavericcedilindeki ldquoSeamless NET ltgt Native communicationrdquo oumlzelliğinin ne kadar oumlnemli olduğuanlaşılmamış da olabilir Bunun oumlnemini anlatabilmek iccedilin Win32primeden Netrsquoe erişmeyeccedilalışmak gerekir

Bu makalede Win32 ortamından Net Frameworkrsquoe erişeceğiz ve tuumlm bu zorlukları sizleringoumlzleri oumlnuumlne sereceğim Oumlncelikle Visual Studio 2005 ile bir Class Library(DLL)oluşturacağızBu DLLrsquoimiz SQL Server 2005primee erişim sağlayan bir kaccedil sınıftan ibaret olacakVe Bu DLLrsquoimizi Delphi 7 altından kullanacağız

O halde kodlamaya başlayabiliriz Oumlncelikle Visual Studiorsquomuzu accedilıyoruz ve yeni bir ClassLibrary projesi oluşturuyoruz Ardından MicrosoftSqlServerConnectionInfoMicrosoftSqlServerSmo MicrosoftSqlServerSmoEnum MicrosoftSqlServerSqlEnumlibraryrsquolerini referans olarak ekliyoruz Projemiz aşağıda goumlruumlnduumlğuuml gibi olacaktır

Son Yazılar

Yeni Veri Tipleri ve Operator OverloadingInterface Nedir Nerelerde ve Neden Kullanırız Derinlemesine Threading(3)SQLrsquode Benzerlik AlgoritmalarıhellipFull Text Searchinghellip

Kategoriler

Genel (4)IDE (1)

İşletim Sistemi (7)Programlama (43)

Net (3)C (2)Delphi (43)Grafik (2)Internet (4)Veritabanı (3)Win32 (6)

Takvim

Temmuz 2010

PDFmyURLcom

Bu makalenin can alıcı noktası Net ortamında yazdığımız kodlarımızın dışarıdan(Win32ortamından) kullanılabilmesi iccedilin COM programlamadan istifade edeceğimiz gerccedileğidir COMprogramlama kullanacağımıza goumlre dışarıdan erişime accedilacağımız tuumlm sınıfların ComVisibleattributersquou ile goumlruumlnuumlr hacircle getirilmesi gerekir Bir diğer oumlnemli nokta ise Class Libraryprojemizin oumlzelliklerinde gizlidir Bu oumlzel durumları aşağıdaki goumlrsellerden izleyebilirsiniz

Projemizin Application boumlluumlmuumlnden Assembly Information buttonuna tıklanarak yapılalacakayarlar

Temmuz 2010Pts Sal Ccedilar Per Cum Cts Paz

laquo Haz

1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

Arşivler

Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)

Bağlantılar

Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARAN

PDFmyURLcom

Projemizin Build sayfasında yapılacak ayarlar

Zafer Ccedilelenk

Ziyaretccedili Bilgileri

Ziyaret 6 12073

Beğenilenler

Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)

PDFmyURLcom

Bu ayarların yapılmasına muumlteakip C tarafında SQL Server 2005primee bağlanan ve birveritabanının altındaki tuumlm tablolara erişim sağlayabileceğimiz kodları yazmaya başlamadanevvel anlatmamız gereken bir kaccedil husus daha var Bunlardan en oumlnemlisi Net frameworkplatformundaki her veri tuumlruumlnuuml COM ortamında kullanmanın zorluklarıdır Kullanmak istediğimizveri tuumlrleri ki bunların iccedilinde oumlzel sınıflar framework sınıfları gibi tuumlm veri tuumlrleri ComVisibleattributersquou ile işaretlenmiş olmalıdır Net ortamındaki tuumlm tuumlrlerin nasıl youmlnetileceğini dışuygulamalar bilemezler Binlerce tuumlr olduğu hesaplanırsa bu tuumlrlerin hepsinin ComVisible ileişaretlenmesinin ne kadar zor olduğu da aşikacircrdır

Makalemizin başlarında temel veri tuumlrlerinin Net iccedilinde tanımlı olduğunu ifade etmiştik BuCTS adını almıştı ve pek ccedilok programlama dilinin bir arada ccedilalışabilmesi iccedilin son derece

BITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes

Meta

GirişYazılar RSSYorumlar RSSWordPressorg

Etiketler-Liste

Absolute API Byte Arrays Class Reference

COM CreateDesktop CreateProcess

CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next

OpenDesktop Persistance Pointer Procedure

Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess

Thread Untyped Parameters VirtualAllocEx

VirtualFreeEx WaitForSingleObjectWriteProcessMemory

PDFmyURLcom

faydalı bir unsurdu Ancak şimdi bizim iccedilin bir sorun gibi duruyor CTS iccedilinde tanımlı olan bazıbasit değişken tuumlrlerinin COM programlama da ComVisible ile goumlruumlnuumlr hacircle getirilmeden dekullanılabildiğini ifade etmek sanırım sizleri biraz rahatlatacaktır ancak yine de yeteri derecede rahatlamamış olmanız gerekir Ccediluumlnkuuml pek ccedilok projemizde bu projemizde olduğu gibiInteger String vb gibi basit veri tuumlrleri bizim iccedilin yeterli değildir

Net frameworkrsquouumln Smo kuumltuumlphanesi ile Sql Serverrsquoa erişebildiğini biliyoruz Ve bu Smokuumltuumlphanesi iccedilinde Sql Server iccedilindeki hemen hemen her nesne iccedilin tanımlanmış bir veri tipibulunmaktadır(Genellikle bir sınıf) Peki biz bu veritiplerini dışarıya nasıl sunacağız Smonamespacersquoininin tamamını mı ComVisible ile işaretleyeceğiz

Elbette hayır Bu son derece uğraştırıcı ve zor bir durum olurdu Bu sebeple Smo kuumltuumlphanesiiccedilinde ilgilendiğimiz sınıflara karar verecek ve bu sınıflar iccedilin bir arabirim yazacağız Ardından

bu arabirimi goumlruumlnuumlr kılacağız

Oumlrneğin biz bu uygulamamızda Sql Server 2005primee erişip herhangi bir veritabanının iccedilindeki tuumlmtablolsquolara ulaşmak istediğimize goumlre Smo namespacersquoindeki Table sınıfına ait sahte birinterface duumlzenleyeceğiz Gelin biraz da kodlayalım ki daha anlaşılır olsun

Delphi About

Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010

Sık Ziyaret Edilenler

Sayfa Home(16060)

Delphi ve Google Maps API(4132)

Delphi ve Google Maps API(1976)

0102030405060708091011121314151617181920212223242526272829

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServices namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

bilgileri genel kuumlltuumlr amacı ile sunduktan sonra Delphirsquonin bu teknolojiler ile iletişimi hakkındabilgi vermek ve gerccedilek platform bağımsız kodlamanın gelecekte Delphi ileolabileceğinin umudunu sizlerle paylaşmak

Goumlruumllduumlğuuml uumlzere gerek Net gerekse de Java platform bağımsız native kod geliştiremiyorlarUumlrettikleri ara kodların ccedileşitli işletim sistemlerinde yorumlanıp makina koduna ccedilevrilmelerigerekiyor Dolayısı ile teoride bu teknolojileri kullanan uygulamaların native uygulamalardanhızlı olması beklenmiyor

Net bilindiği uumlzere programlama dillerinden bağımsız bir platform Framework adı verilen kodkuumltuumlphanelerinin tuumlm programlama dilleri tarafından ortak bir şekilde kullanılabilmesi CTSdenilen ortak tip sınıflarının Net iccedilinde olması herhangi bir Net destekli dilin bir diğer Netdestekli dil ile iletişimini son derece sorunsuz ve kolay hale getirmekte Buumlyuumlk ccedilaplı projeekiplerinin pek ccedilok programcıya sahip olduğu gerccedileği goumlz oumlnuumlne alındığında bu ekip uumlyelerininherhangi bir Net dilini bilmesi ve bu dil ile geliştirme yapmasının projeye olumsuz bir etkisininolmaması elbette son derece guumlzel bir durum

Net Framework adı verilen kaba tabiri ile programlama kuumltuumlphanesi şu aşamada 35versiyonunda bulunuyor Yakın bir zamanda 40 versiyonunun ccedilıkması bekleniyor Bildiğimkadarı ile Frameworkrsquoteki sınıf tasarımları Net framework 20primedan sonra herhangi bir değişikliğeuğramadı Sadece uumlzerine yeni yetenekler eklendi Kısaca Net terminolojisinden bahsettiktensonra Delphirsquonin bu terminolojiye hangi mesafede olduğu hakkında yazmak isterim

Delphi 7 hacircla pek ccedilok Delphi kullanıcısının kullandığı ana IDE durumunda Bunun stabilite vehız gibi pek ccedilok etkenleri var Delphi gerccedilek anlamda Net ile 8 versiyonunda buluştu AncakDelphi 8 Microsoftrsquoun Net teknolojisine ilk desteği veren uumlruumln olduğu iccedilin hiccedilte stabil değildive Delphi severler tarafından pek de tutulmadı Ardından Borland Net platformuna desteğiniDelphi 2005 ile suumlrduumlrduuml Ancak kişisel tecruumlbelerim ile soumlyleyebilirim ki o da gerektiği oumllccediluumldestabil değildi ve pek ccedilok sorunu vardı Net desteği 2006 ve 2007 suumlruumlmlerine kadar devam ettive ardından buumlyuumlk bir değişim ile karşılaştık

Borland programlama uumlruumlnlerini CodeGear isimli firmaya devretmiş ve ardından bu uumlruumlnleriEmbarcadero isimli bir firma satın almıştı Bu suumlreccedilte artık Delphi ve diğer programlamaortamlarının Netrsquoe destek vermemesine karar verildi Bu son derece yerinde bir karardı Delphihayata ilk geldiği 1995 yılından bu zamana kadar native uygulama geliştirme konusundaduumlnyada pek ccedilok kez oumlduumll almış bir ortam iken Net framework desteği adına adeta kendikendine intihar etme kararı almıştı

Guumlnuumlmuumlzde Net programlama adına Delphi yazım tarzına aşina olan programcıların DelphiPrism uumlruumlnuumlnuuml tercih etmesi isteniyor Bu uumlruumln Net framework ortamına 100 destek verenve Delphi yazım tarzına son derece benzeyen Embarcadero firması programlama ortamlarıailesinin bir başka uumlruumlnuuml

Embarcadero Delphi uumlruumlnuumlnuuml satın aldıktan sonra beklentilerimizin aksine bu uumlruumln ailesineson derece oumlnem verdi ve uumlruumlnuumln eskide olduğu gibi popuumllerliğini yeniden kazanmasındabuumlyuumlk katkı sağlamaya başladı Bu konuda sevgili arkadaşımız Sadettin POLATrsquoın sitesindekimakaleyi okumanızı oumlneriyorum

EnumDesktopProc EnumDesktops Flash FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoGetThreadContext GetTickCount GetTickCount64Hacking Inheritance InitializeCriticalSectionInterface InterlockedCompareExchangeInterlockedDecrement InterlockedExchangeInterlockedExchangeAdd InterlockedIncrementJavaScript LeaveCriticalSection Method PointerModule32First Module32Next MSSQL OpenDesktopOpenEvent OpenMutex OpenSemaphoreOpenWaitableTimer Operator Overloading PersistancePointer Procedure Pointer ProcessProcess32First Process32Next Query QueryInterfaceQueryPerformanceCounter Queue ReleaseMutexReleaseSemaphore Reqursion ResetEvent ResumeThreadRTTI SetEvent SetProcessWorkingSetSizeSetThreadContext SetWaitableTimer Smilarity SORT SQLSQL Server Stream SuspendThread Sw itchDesktopTDateTime TerminateProcess TerminateThread

Thread TInterfacedObject TValue UntypedParameters VirtualAllocEx VirtualFreeEx

WaitForMultipleObjects WaitForSingleObjectWeaver WriteProcessMemory _AddRef _Release

WP Cumulus Flash tag cloud by Roy Tanckrequires Flash Player 9 or better

Son Yorumlar

Yeni Veri Tipleri ve Operator Overloading iccedilinTuğrul HELVACIYeni Veri Tipleri ve Operator Overloading iccedilinZafer CcedilelenkDelphi ve Google Maps API iccedilin TuğrulHELVACIDelphi ve Google Maps API iccedilin ahmetZiyaretccedili Defteri iccedilin Tuğrul HELVACI

PDFmyURLcom

Konumuzun Win32 ve Net olması muumlnasebeti ile kısa bir zaman sonra ccedilıkması beklenenyeni Delphi suumlruumlmuumlnuumln yani Delphi Weaverrsquoın ccedilok oumlnem verdiğim bir oumlzelliğini de sizlerlepaylaşmak istiyorum Delphi Weaverrsquoın oumlzelliklerinde listelenen ancak pek ccedilok kişinin dikkatinicezbetmeyen ldquoSeamless NET ltgt Native communicationrdquo oumlzelliği eminim pek ccedilok kişininnative uygulama geliştirebilecekleri ortamlara geccedilişinde etken olacaktır Peki nedir buldquoSeamless NET ltgt Native communicationrdquo oumlzelliği

Bu oumlzellik hakkında henuumlz net bir şey soumlz konusu değil Ancak neler yapılabileceğihususunda burayı ve bu haber grubunu takip etmenizi tavsiye edebilirim

Kısaca Win32 ortamında tamamen native kod geliştirirken Net framework fonksiyonalitesineherhangi bir COM bağımlılığı olmadan 100 delphi kodları ile erişmek isterseniz bu teknoloji

tam size goumlre demektir

Atozed Softwarersquoin uumlzerinde ccedilalıştığı CrossTalk isimli uumlruumln Delphi 5672009 altından NetFrameworkrsquoe erişebilmeniz iccedilin gereken tuumlm altyapıyı sağlayacak Projenin lideri olan Chad ZHover ile yapmış olduğum goumlruumlşme neticesinde oumlğrendiğim şey ise beni daha da sevindirdiCrosTalk uumlruumlnuuml Delphi Weawer ile birlikte gelecek Yani birkaccedil paragraf oumlnce belirttiğimizldquoSeamless NET ltgt Native communicationrdquo Delphi Weaver altındaki CrossTalk uumlruumlnuumlnuumlsimgeliyor

Bu yeni teknolojinin Delphirsquonin yuumlkselmesinde buumlyuumlk bir paydaya hizmet edeceği inancınıtaşıyorum Ayrıca Delphirsquonin hedefleri arasında Cross platform code compilation olduğunu dabilmenizi istiyorum İşte gerccedilek platform bağımsız kodlama bizlerin hizmetine sunulacakDelphirsquode yazdığımız uygulamaları Windows Linux yada MacOS gibi işletim sistemleriuumlzerinde ccedilalışır halde goumlreceğiz Elbette bu Netrsquoin yada Javarsquonın yaptığı gibi değil nativederleme ile yapılacak

Tuumlm bu anlatılanlar belki de hacircla afaki kalmış olabilir CrossTalkrsquoın yahut Delphi Weavericcedilindeki ldquoSeamless NET ltgt Native communicationrdquo oumlzelliğinin ne kadar oumlnemli olduğuanlaşılmamış da olabilir Bunun oumlnemini anlatabilmek iccedilin Win32primeden Netrsquoe erişmeyeccedilalışmak gerekir

Bu makalede Win32 ortamından Net Frameworkrsquoe erişeceğiz ve tuumlm bu zorlukları sizleringoumlzleri oumlnuumlne sereceğim Oumlncelikle Visual Studio 2005 ile bir Class Library(DLL)oluşturacağızBu DLLrsquoimiz SQL Server 2005primee erişim sağlayan bir kaccedil sınıftan ibaret olacakVe Bu DLLrsquoimizi Delphi 7 altından kullanacağız

O halde kodlamaya başlayabiliriz Oumlncelikle Visual Studiorsquomuzu accedilıyoruz ve yeni bir ClassLibrary projesi oluşturuyoruz Ardından MicrosoftSqlServerConnectionInfoMicrosoftSqlServerSmo MicrosoftSqlServerSmoEnum MicrosoftSqlServerSqlEnumlibraryrsquolerini referans olarak ekliyoruz Projemiz aşağıda goumlruumlnduumlğuuml gibi olacaktır

Son Yazılar

Yeni Veri Tipleri ve Operator OverloadingInterface Nedir Nerelerde ve Neden Kullanırız Derinlemesine Threading(3)SQLrsquode Benzerlik AlgoritmalarıhellipFull Text Searchinghellip

Kategoriler

Genel (4)IDE (1)

İşletim Sistemi (7)Programlama (43)

Net (3)C (2)Delphi (43)Grafik (2)Internet (4)Veritabanı (3)Win32 (6)

Takvim

Temmuz 2010

PDFmyURLcom

Bu makalenin can alıcı noktası Net ortamında yazdığımız kodlarımızın dışarıdan(Win32ortamından) kullanılabilmesi iccedilin COM programlamadan istifade edeceğimiz gerccedileğidir COMprogramlama kullanacağımıza goumlre dışarıdan erişime accedilacağımız tuumlm sınıfların ComVisibleattributersquou ile goumlruumlnuumlr hacircle getirilmesi gerekir Bir diğer oumlnemli nokta ise Class Libraryprojemizin oumlzelliklerinde gizlidir Bu oumlzel durumları aşağıdaki goumlrsellerden izleyebilirsiniz

Projemizin Application boumlluumlmuumlnden Assembly Information buttonuna tıklanarak yapılalacakayarlar

Temmuz 2010Pts Sal Ccedilar Per Cum Cts Paz

laquo Haz

1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

Arşivler

Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)

Bağlantılar

Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARAN

PDFmyURLcom

Projemizin Build sayfasında yapılacak ayarlar

Zafer Ccedilelenk

Ziyaretccedili Bilgileri

Ziyaret 6 12073

Beğenilenler

Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)

PDFmyURLcom

Bu ayarların yapılmasına muumlteakip C tarafında SQL Server 2005primee bağlanan ve birveritabanının altındaki tuumlm tablolara erişim sağlayabileceğimiz kodları yazmaya başlamadanevvel anlatmamız gereken bir kaccedil husus daha var Bunlardan en oumlnemlisi Net frameworkplatformundaki her veri tuumlruumlnuuml COM ortamında kullanmanın zorluklarıdır Kullanmak istediğimizveri tuumlrleri ki bunların iccedilinde oumlzel sınıflar framework sınıfları gibi tuumlm veri tuumlrleri ComVisibleattributersquou ile işaretlenmiş olmalıdır Net ortamındaki tuumlm tuumlrlerin nasıl youmlnetileceğini dışuygulamalar bilemezler Binlerce tuumlr olduğu hesaplanırsa bu tuumlrlerin hepsinin ComVisible ileişaretlenmesinin ne kadar zor olduğu da aşikacircrdır

Makalemizin başlarında temel veri tuumlrlerinin Net iccedilinde tanımlı olduğunu ifade etmiştik BuCTS adını almıştı ve pek ccedilok programlama dilinin bir arada ccedilalışabilmesi iccedilin son derece

BITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes

Meta

GirişYazılar RSSYorumlar RSSWordPressorg

Etiketler-Liste

Absolute API Byte Arrays Class Reference

COM CreateDesktop CreateProcess

CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next

OpenDesktop Persistance Pointer Procedure

Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess

Thread Untyped Parameters VirtualAllocEx

VirtualFreeEx WaitForSingleObjectWriteProcessMemory

PDFmyURLcom

faydalı bir unsurdu Ancak şimdi bizim iccedilin bir sorun gibi duruyor CTS iccedilinde tanımlı olan bazıbasit değişken tuumlrlerinin COM programlama da ComVisible ile goumlruumlnuumlr hacircle getirilmeden dekullanılabildiğini ifade etmek sanırım sizleri biraz rahatlatacaktır ancak yine de yeteri derecede rahatlamamış olmanız gerekir Ccediluumlnkuuml pek ccedilok projemizde bu projemizde olduğu gibiInteger String vb gibi basit veri tuumlrleri bizim iccedilin yeterli değildir

Net frameworkrsquouumln Smo kuumltuumlphanesi ile Sql Serverrsquoa erişebildiğini biliyoruz Ve bu Smokuumltuumlphanesi iccedilinde Sql Server iccedilindeki hemen hemen her nesne iccedilin tanımlanmış bir veri tipibulunmaktadır(Genellikle bir sınıf) Peki biz bu veritiplerini dışarıya nasıl sunacağız Smonamespacersquoininin tamamını mı ComVisible ile işaretleyeceğiz

Elbette hayır Bu son derece uğraştırıcı ve zor bir durum olurdu Bu sebeple Smo kuumltuumlphanesiiccedilinde ilgilendiğimiz sınıflara karar verecek ve bu sınıflar iccedilin bir arabirim yazacağız Ardından

bu arabirimi goumlruumlnuumlr kılacağız

Oumlrneğin biz bu uygulamamızda Sql Server 2005primee erişip herhangi bir veritabanının iccedilindeki tuumlmtablolsquolara ulaşmak istediğimize goumlre Smo namespacersquoindeki Table sınıfına ait sahte birinterface duumlzenleyeceğiz Gelin biraz da kodlayalım ki daha anlaşılır olsun

Delphi About

Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010

Sık Ziyaret Edilenler

Sayfa Home(16060)

Delphi ve Google Maps API(4132)

Delphi ve Google Maps API(1976)

0102030405060708091011121314151617181920212223242526272829

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServices namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Konumuzun Win32 ve Net olması muumlnasebeti ile kısa bir zaman sonra ccedilıkması beklenenyeni Delphi suumlruumlmuumlnuumln yani Delphi Weaverrsquoın ccedilok oumlnem verdiğim bir oumlzelliğini de sizlerlepaylaşmak istiyorum Delphi Weaverrsquoın oumlzelliklerinde listelenen ancak pek ccedilok kişinin dikkatinicezbetmeyen ldquoSeamless NET ltgt Native communicationrdquo oumlzelliği eminim pek ccedilok kişininnative uygulama geliştirebilecekleri ortamlara geccedilişinde etken olacaktır Peki nedir buldquoSeamless NET ltgt Native communicationrdquo oumlzelliği

Bu oumlzellik hakkında henuumlz net bir şey soumlz konusu değil Ancak neler yapılabileceğihususunda burayı ve bu haber grubunu takip etmenizi tavsiye edebilirim

Kısaca Win32 ortamında tamamen native kod geliştirirken Net framework fonksiyonalitesineherhangi bir COM bağımlılığı olmadan 100 delphi kodları ile erişmek isterseniz bu teknoloji

tam size goumlre demektir

Atozed Softwarersquoin uumlzerinde ccedilalıştığı CrossTalk isimli uumlruumln Delphi 5672009 altından NetFrameworkrsquoe erişebilmeniz iccedilin gereken tuumlm altyapıyı sağlayacak Projenin lideri olan Chad ZHover ile yapmış olduğum goumlruumlşme neticesinde oumlğrendiğim şey ise beni daha da sevindirdiCrosTalk uumlruumlnuuml Delphi Weawer ile birlikte gelecek Yani birkaccedil paragraf oumlnce belirttiğimizldquoSeamless NET ltgt Native communicationrdquo Delphi Weaver altındaki CrossTalk uumlruumlnuumlnuumlsimgeliyor

Bu yeni teknolojinin Delphirsquonin yuumlkselmesinde buumlyuumlk bir paydaya hizmet edeceği inancınıtaşıyorum Ayrıca Delphirsquonin hedefleri arasında Cross platform code compilation olduğunu dabilmenizi istiyorum İşte gerccedilek platform bağımsız kodlama bizlerin hizmetine sunulacakDelphirsquode yazdığımız uygulamaları Windows Linux yada MacOS gibi işletim sistemleriuumlzerinde ccedilalışır halde goumlreceğiz Elbette bu Netrsquoin yada Javarsquonın yaptığı gibi değil nativederleme ile yapılacak

Tuumlm bu anlatılanlar belki de hacircla afaki kalmış olabilir CrossTalkrsquoın yahut Delphi Weavericcedilindeki ldquoSeamless NET ltgt Native communicationrdquo oumlzelliğinin ne kadar oumlnemli olduğuanlaşılmamış da olabilir Bunun oumlnemini anlatabilmek iccedilin Win32primeden Netrsquoe erişmeyeccedilalışmak gerekir

Bu makalede Win32 ortamından Net Frameworkrsquoe erişeceğiz ve tuumlm bu zorlukları sizleringoumlzleri oumlnuumlne sereceğim Oumlncelikle Visual Studio 2005 ile bir Class Library(DLL)oluşturacağızBu DLLrsquoimiz SQL Server 2005primee erişim sağlayan bir kaccedil sınıftan ibaret olacakVe Bu DLLrsquoimizi Delphi 7 altından kullanacağız

O halde kodlamaya başlayabiliriz Oumlncelikle Visual Studiorsquomuzu accedilıyoruz ve yeni bir ClassLibrary projesi oluşturuyoruz Ardından MicrosoftSqlServerConnectionInfoMicrosoftSqlServerSmo MicrosoftSqlServerSmoEnum MicrosoftSqlServerSqlEnumlibraryrsquolerini referans olarak ekliyoruz Projemiz aşağıda goumlruumlnduumlğuuml gibi olacaktır

Son Yazılar

Yeni Veri Tipleri ve Operator OverloadingInterface Nedir Nerelerde ve Neden Kullanırız Derinlemesine Threading(3)SQLrsquode Benzerlik AlgoritmalarıhellipFull Text Searchinghellip

Kategoriler

Genel (4)IDE (1)

İşletim Sistemi (7)Programlama (43)

Net (3)C (2)Delphi (43)Grafik (2)Internet (4)Veritabanı (3)Win32 (6)

Takvim

Temmuz 2010

PDFmyURLcom

Bu makalenin can alıcı noktası Net ortamında yazdığımız kodlarımızın dışarıdan(Win32ortamından) kullanılabilmesi iccedilin COM programlamadan istifade edeceğimiz gerccedileğidir COMprogramlama kullanacağımıza goumlre dışarıdan erişime accedilacağımız tuumlm sınıfların ComVisibleattributersquou ile goumlruumlnuumlr hacircle getirilmesi gerekir Bir diğer oumlnemli nokta ise Class Libraryprojemizin oumlzelliklerinde gizlidir Bu oumlzel durumları aşağıdaki goumlrsellerden izleyebilirsiniz

Projemizin Application boumlluumlmuumlnden Assembly Information buttonuna tıklanarak yapılalacakayarlar

Temmuz 2010Pts Sal Ccedilar Per Cum Cts Paz

laquo Haz

1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

Arşivler

Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)

Bağlantılar

Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARAN

PDFmyURLcom

Projemizin Build sayfasında yapılacak ayarlar

Zafer Ccedilelenk

Ziyaretccedili Bilgileri

Ziyaret 6 12073

Beğenilenler

Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)

PDFmyURLcom

Bu ayarların yapılmasına muumlteakip C tarafında SQL Server 2005primee bağlanan ve birveritabanının altındaki tuumlm tablolara erişim sağlayabileceğimiz kodları yazmaya başlamadanevvel anlatmamız gereken bir kaccedil husus daha var Bunlardan en oumlnemlisi Net frameworkplatformundaki her veri tuumlruumlnuuml COM ortamında kullanmanın zorluklarıdır Kullanmak istediğimizveri tuumlrleri ki bunların iccedilinde oumlzel sınıflar framework sınıfları gibi tuumlm veri tuumlrleri ComVisibleattributersquou ile işaretlenmiş olmalıdır Net ortamındaki tuumlm tuumlrlerin nasıl youmlnetileceğini dışuygulamalar bilemezler Binlerce tuumlr olduğu hesaplanırsa bu tuumlrlerin hepsinin ComVisible ileişaretlenmesinin ne kadar zor olduğu da aşikacircrdır

Makalemizin başlarında temel veri tuumlrlerinin Net iccedilinde tanımlı olduğunu ifade etmiştik BuCTS adını almıştı ve pek ccedilok programlama dilinin bir arada ccedilalışabilmesi iccedilin son derece

BITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes

Meta

GirişYazılar RSSYorumlar RSSWordPressorg

Etiketler-Liste

Absolute API Byte Arrays Class Reference

COM CreateDesktop CreateProcess

CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next

OpenDesktop Persistance Pointer Procedure

Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess

Thread Untyped Parameters VirtualAllocEx

VirtualFreeEx WaitForSingleObjectWriteProcessMemory

PDFmyURLcom

faydalı bir unsurdu Ancak şimdi bizim iccedilin bir sorun gibi duruyor CTS iccedilinde tanımlı olan bazıbasit değişken tuumlrlerinin COM programlama da ComVisible ile goumlruumlnuumlr hacircle getirilmeden dekullanılabildiğini ifade etmek sanırım sizleri biraz rahatlatacaktır ancak yine de yeteri derecede rahatlamamış olmanız gerekir Ccediluumlnkuuml pek ccedilok projemizde bu projemizde olduğu gibiInteger String vb gibi basit veri tuumlrleri bizim iccedilin yeterli değildir

Net frameworkrsquouumln Smo kuumltuumlphanesi ile Sql Serverrsquoa erişebildiğini biliyoruz Ve bu Smokuumltuumlphanesi iccedilinde Sql Server iccedilindeki hemen hemen her nesne iccedilin tanımlanmış bir veri tipibulunmaktadır(Genellikle bir sınıf) Peki biz bu veritiplerini dışarıya nasıl sunacağız Smonamespacersquoininin tamamını mı ComVisible ile işaretleyeceğiz

Elbette hayır Bu son derece uğraştırıcı ve zor bir durum olurdu Bu sebeple Smo kuumltuumlphanesiiccedilinde ilgilendiğimiz sınıflara karar verecek ve bu sınıflar iccedilin bir arabirim yazacağız Ardından

bu arabirimi goumlruumlnuumlr kılacağız

Oumlrneğin biz bu uygulamamızda Sql Server 2005primee erişip herhangi bir veritabanının iccedilindeki tuumlmtablolsquolara ulaşmak istediğimize goumlre Smo namespacersquoindeki Table sınıfına ait sahte birinterface duumlzenleyeceğiz Gelin biraz da kodlayalım ki daha anlaşılır olsun

Delphi About

Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010

Sık Ziyaret Edilenler

Sayfa Home(16060)

Delphi ve Google Maps API(4132)

Delphi ve Google Maps API(1976)

0102030405060708091011121314151617181920212223242526272829

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServices namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Bu makalenin can alıcı noktası Net ortamında yazdığımız kodlarımızın dışarıdan(Win32ortamından) kullanılabilmesi iccedilin COM programlamadan istifade edeceğimiz gerccedileğidir COMprogramlama kullanacağımıza goumlre dışarıdan erişime accedilacağımız tuumlm sınıfların ComVisibleattributersquou ile goumlruumlnuumlr hacircle getirilmesi gerekir Bir diğer oumlnemli nokta ise Class Libraryprojemizin oumlzelliklerinde gizlidir Bu oumlzel durumları aşağıdaki goumlrsellerden izleyebilirsiniz

Projemizin Application boumlluumlmuumlnden Assembly Information buttonuna tıklanarak yapılalacakayarlar

Temmuz 2010Pts Sal Ccedilar Per Cum Cts Paz

laquo Haz

1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

Arşivler

Haziran 2010 (1)Mayıs 2010 (1)Nisan 2010 (3)Ağustos 2009 (1)Temmuz 2009 (2)Haziran 2009 (7)Mayıs 2009 (32)

Bağlantılar

Bir Tuumlrkccedile SevdalısıDelphi Tuumlrkiye ForumGuumlrcan OumlZTUumlRKMFatih KUumlCcedilUumlKKELEPCcedilEMemik YANIK KişiselMemik YANIKrsquoın GuumlnluumlğuumlNick HodgesSinan BARAN

PDFmyURLcom

Projemizin Build sayfasında yapılacak ayarlar

Zafer Ccedilelenk

Ziyaretccedili Bilgileri

Ziyaret 6 12073

Beğenilenler

Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)

PDFmyURLcom

Bu ayarların yapılmasına muumlteakip C tarafında SQL Server 2005primee bağlanan ve birveritabanının altındaki tuumlm tablolara erişim sağlayabileceğimiz kodları yazmaya başlamadanevvel anlatmamız gereken bir kaccedil husus daha var Bunlardan en oumlnemlisi Net frameworkplatformundaki her veri tuumlruumlnuuml COM ortamında kullanmanın zorluklarıdır Kullanmak istediğimizveri tuumlrleri ki bunların iccedilinde oumlzel sınıflar framework sınıfları gibi tuumlm veri tuumlrleri ComVisibleattributersquou ile işaretlenmiş olmalıdır Net ortamındaki tuumlm tuumlrlerin nasıl youmlnetileceğini dışuygulamalar bilemezler Binlerce tuumlr olduğu hesaplanırsa bu tuumlrlerin hepsinin ComVisible ileişaretlenmesinin ne kadar zor olduğu da aşikacircrdır

Makalemizin başlarında temel veri tuumlrlerinin Net iccedilinde tanımlı olduğunu ifade etmiştik BuCTS adını almıştı ve pek ccedilok programlama dilinin bir arada ccedilalışabilmesi iccedilin son derece

BITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes

Meta

GirişYazılar RSSYorumlar RSSWordPressorg

Etiketler-Liste

Absolute API Byte Arrays Class Reference

COM CreateDesktop CreateProcess

CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next

OpenDesktop Persistance Pointer Procedure

Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess

Thread Untyped Parameters VirtualAllocEx

VirtualFreeEx WaitForSingleObjectWriteProcessMemory

PDFmyURLcom

faydalı bir unsurdu Ancak şimdi bizim iccedilin bir sorun gibi duruyor CTS iccedilinde tanımlı olan bazıbasit değişken tuumlrlerinin COM programlama da ComVisible ile goumlruumlnuumlr hacircle getirilmeden dekullanılabildiğini ifade etmek sanırım sizleri biraz rahatlatacaktır ancak yine de yeteri derecede rahatlamamış olmanız gerekir Ccediluumlnkuuml pek ccedilok projemizde bu projemizde olduğu gibiInteger String vb gibi basit veri tuumlrleri bizim iccedilin yeterli değildir

Net frameworkrsquouumln Smo kuumltuumlphanesi ile Sql Serverrsquoa erişebildiğini biliyoruz Ve bu Smokuumltuumlphanesi iccedilinde Sql Server iccedilindeki hemen hemen her nesne iccedilin tanımlanmış bir veri tipibulunmaktadır(Genellikle bir sınıf) Peki biz bu veritiplerini dışarıya nasıl sunacağız Smonamespacersquoininin tamamını mı ComVisible ile işaretleyeceğiz

Elbette hayır Bu son derece uğraştırıcı ve zor bir durum olurdu Bu sebeple Smo kuumltuumlphanesiiccedilinde ilgilendiğimiz sınıflara karar verecek ve bu sınıflar iccedilin bir arabirim yazacağız Ardından

bu arabirimi goumlruumlnuumlr kılacağız

Oumlrneğin biz bu uygulamamızda Sql Server 2005primee erişip herhangi bir veritabanının iccedilindeki tuumlmtablolsquolara ulaşmak istediğimize goumlre Smo namespacersquoindeki Table sınıfına ait sahte birinterface duumlzenleyeceğiz Gelin biraz da kodlayalım ki daha anlaşılır olsun

Delphi About

Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010

Sık Ziyaret Edilenler

Sayfa Home(16060)

Delphi ve Google Maps API(4132)

Delphi ve Google Maps API(1976)

0102030405060708091011121314151617181920212223242526272829

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServices namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Projemizin Build sayfasında yapılacak ayarlar

Zafer Ccedilelenk

Ziyaretccedili Bilgileri

Ziyaret 6 12073

Beğenilenler

Delphi 2010 (Weaver) ve TValue - 14 votesDerinlemesine Threading(3) - 13 votesDerinlemesine Threading(2) - 6 votesDerinlemesine Threading(1) - 6 votesYeni Veri Tipleri ve Operator Overloading - 4votesWin32 amp Net(Delphi-gtC) - 4 votesDelphi ve Google Maps API - 3 votesTThreadWaitFor Bug - 3 votesBITS(Background Intelligent Transfer Service)

PDFmyURLcom

Bu ayarların yapılmasına muumlteakip C tarafında SQL Server 2005primee bağlanan ve birveritabanının altındaki tuumlm tablolara erişim sağlayabileceğimiz kodları yazmaya başlamadanevvel anlatmamız gereken bir kaccedil husus daha var Bunlardan en oumlnemlisi Net frameworkplatformundaki her veri tuumlruumlnuuml COM ortamında kullanmanın zorluklarıdır Kullanmak istediğimizveri tuumlrleri ki bunların iccedilinde oumlzel sınıflar framework sınıfları gibi tuumlm veri tuumlrleri ComVisibleattributersquou ile işaretlenmiş olmalıdır Net ortamındaki tuumlm tuumlrlerin nasıl youmlnetileceğini dışuygulamalar bilemezler Binlerce tuumlr olduğu hesaplanırsa bu tuumlrlerin hepsinin ComVisible ileişaretlenmesinin ne kadar zor olduğu da aşikacircrdır

Makalemizin başlarında temel veri tuumlrlerinin Net iccedilinde tanımlı olduğunu ifade etmiştik BuCTS adını almıştı ve pek ccedilok programlama dilinin bir arada ccedilalışabilmesi iccedilin son derece

BITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes

Meta

GirişYazılar RSSYorumlar RSSWordPressorg

Etiketler-Liste

Absolute API Byte Arrays Class Reference

COM CreateDesktop CreateProcess

CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next

OpenDesktop Persistance Pointer Procedure

Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess

Thread Untyped Parameters VirtualAllocEx

VirtualFreeEx WaitForSingleObjectWriteProcessMemory

PDFmyURLcom

faydalı bir unsurdu Ancak şimdi bizim iccedilin bir sorun gibi duruyor CTS iccedilinde tanımlı olan bazıbasit değişken tuumlrlerinin COM programlama da ComVisible ile goumlruumlnuumlr hacircle getirilmeden dekullanılabildiğini ifade etmek sanırım sizleri biraz rahatlatacaktır ancak yine de yeteri derecede rahatlamamış olmanız gerekir Ccediluumlnkuuml pek ccedilok projemizde bu projemizde olduğu gibiInteger String vb gibi basit veri tuumlrleri bizim iccedilin yeterli değildir

Net frameworkrsquouumln Smo kuumltuumlphanesi ile Sql Serverrsquoa erişebildiğini biliyoruz Ve bu Smokuumltuumlphanesi iccedilinde Sql Server iccedilindeki hemen hemen her nesne iccedilin tanımlanmış bir veri tipibulunmaktadır(Genellikle bir sınıf) Peki biz bu veritiplerini dışarıya nasıl sunacağız Smonamespacersquoininin tamamını mı ComVisible ile işaretleyeceğiz

Elbette hayır Bu son derece uğraştırıcı ve zor bir durum olurdu Bu sebeple Smo kuumltuumlphanesiiccedilinde ilgilendiğimiz sınıflara karar verecek ve bu sınıflar iccedilin bir arabirim yazacağız Ardından

bu arabirimi goumlruumlnuumlr kılacağız

Oumlrneğin biz bu uygulamamızda Sql Server 2005primee erişip herhangi bir veritabanının iccedilindeki tuumlmtablolsquolara ulaşmak istediğimize goumlre Smo namespacersquoindeki Table sınıfına ait sahte birinterface duumlzenleyeceğiz Gelin biraz da kodlayalım ki daha anlaşılır olsun

Delphi About

Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010

Sık Ziyaret Edilenler

Sayfa Home(16060)

Delphi ve Google Maps API(4132)

Delphi ve Google Maps API(1976)

0102030405060708091011121314151617181920212223242526272829

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServices namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Bu ayarların yapılmasına muumlteakip C tarafında SQL Server 2005primee bağlanan ve birveritabanının altındaki tuumlm tablolara erişim sağlayabileceğimiz kodları yazmaya başlamadanevvel anlatmamız gereken bir kaccedil husus daha var Bunlardan en oumlnemlisi Net frameworkplatformundaki her veri tuumlruumlnuuml COM ortamında kullanmanın zorluklarıdır Kullanmak istediğimizveri tuumlrleri ki bunların iccedilinde oumlzel sınıflar framework sınıfları gibi tuumlm veri tuumlrleri ComVisibleattributersquou ile işaretlenmiş olmalıdır Net ortamındaki tuumlm tuumlrlerin nasıl youmlnetileceğini dışuygulamalar bilemezler Binlerce tuumlr olduğu hesaplanırsa bu tuumlrlerin hepsinin ComVisible ileişaretlenmesinin ne kadar zor olduğu da aşikacircrdır

Makalemizin başlarında temel veri tuumlrlerinin Net iccedilinde tanımlı olduğunu ifade etmiştik BuCTS adını almıştı ve pek ccedilok programlama dilinin bir arada ccedilalışabilmesi iccedilin son derece

BITS(Background Intelligent Transfer Service)ile sessiz sedasız download ) - 3 votesBir Kiosk ve CreateDesktop macerası - 3votes

Meta

GirişYazılar RSSYorumlar RSSWordPressorg

Etiketler-Liste

Absolute API Byte Arrays Class Reference

COM CreateDesktop CreateProcess

CreateRemoteThread CreateToolHelp32SnapShotDTS EnumDesktopProc EnumDesktops FunctionPointer GetCurrentProcess GetIconInfo GetKeyStateGetLastInputInfo GetProcessMemoryInfo GetStartupInfoHacking Inheritance Interface JavaScriptMethod Pointer Module32First Module32Next

OpenDesktop Persistance Pointer Procedure

Pointer Process Process32First Process32NextReqursion RTTI SetProcessWorkingSetSize SQLServer Sw itchDesktop TerminateProcess

Thread Untyped Parameters VirtualAllocEx

VirtualFreeEx WaitForSingleObjectWriteProcessMemory

PDFmyURLcom

faydalı bir unsurdu Ancak şimdi bizim iccedilin bir sorun gibi duruyor CTS iccedilinde tanımlı olan bazıbasit değişken tuumlrlerinin COM programlama da ComVisible ile goumlruumlnuumlr hacircle getirilmeden dekullanılabildiğini ifade etmek sanırım sizleri biraz rahatlatacaktır ancak yine de yeteri derecede rahatlamamış olmanız gerekir Ccediluumlnkuuml pek ccedilok projemizde bu projemizde olduğu gibiInteger String vb gibi basit veri tuumlrleri bizim iccedilin yeterli değildir

Net frameworkrsquouumln Smo kuumltuumlphanesi ile Sql Serverrsquoa erişebildiğini biliyoruz Ve bu Smokuumltuumlphanesi iccedilinde Sql Server iccedilindeki hemen hemen her nesne iccedilin tanımlanmış bir veri tipibulunmaktadır(Genellikle bir sınıf) Peki biz bu veritiplerini dışarıya nasıl sunacağız Smonamespacersquoininin tamamını mı ComVisible ile işaretleyeceğiz

Elbette hayır Bu son derece uğraştırıcı ve zor bir durum olurdu Bu sebeple Smo kuumltuumlphanesiiccedilinde ilgilendiğimiz sınıflara karar verecek ve bu sınıflar iccedilin bir arabirim yazacağız Ardından

bu arabirimi goumlruumlnuumlr kılacağız

Oumlrneğin biz bu uygulamamızda Sql Server 2005primee erişip herhangi bir veritabanının iccedilindeki tuumlmtablolsquolara ulaşmak istediğimize goumlre Smo namespacersquoindeki Table sınıfına ait sahte birinterface duumlzenleyeceğiz Gelin biraz da kodlayalım ki daha anlaşılır olsun

Delphi About

Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010

Sık Ziyaret Edilenler

Sayfa Home(16060)

Delphi ve Google Maps API(4132)

Delphi ve Google Maps API(1976)

0102030405060708091011121314151617181920212223242526272829

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServices namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

faydalı bir unsurdu Ancak şimdi bizim iccedilin bir sorun gibi duruyor CTS iccedilinde tanımlı olan bazıbasit değişken tuumlrlerinin COM programlama da ComVisible ile goumlruumlnuumlr hacircle getirilmeden dekullanılabildiğini ifade etmek sanırım sizleri biraz rahatlatacaktır ancak yine de yeteri derecede rahatlamamış olmanız gerekir Ccediluumlnkuuml pek ccedilok projemizde bu projemizde olduğu gibiInteger String vb gibi basit veri tuumlrleri bizim iccedilin yeterli değildir

Net frameworkrsquouumln Smo kuumltuumlphanesi ile Sql Serverrsquoa erişebildiğini biliyoruz Ve bu Smokuumltuumlphanesi iccedilinde Sql Server iccedilindeki hemen hemen her nesne iccedilin tanımlanmış bir veri tipibulunmaktadır(Genellikle bir sınıf) Peki biz bu veritiplerini dışarıya nasıl sunacağız Smonamespacersquoininin tamamını mı ComVisible ile işaretleyeceğiz

Elbette hayır Bu son derece uğraştırıcı ve zor bir durum olurdu Bu sebeple Smo kuumltuumlphanesiiccedilinde ilgilendiğimiz sınıflara karar verecek ve bu sınıflar iccedilin bir arabirim yazacağız Ardından

bu arabirimi goumlruumlnuumlr kılacağız

Oumlrneğin biz bu uygulamamızda Sql Server 2005primee erişip herhangi bir veritabanının iccedilindeki tuumlmtablolsquolara ulaşmak istediğimize goumlre Smo namespacersquoindeki Table sınıfına ait sahte birinterface duumlzenleyeceğiz Gelin biraz da kodlayalım ki daha anlaşılır olsun

Delphi About

Auto Select All The Text For TCustomEdit OnMouse Click 29 Haziran 2010Memory Leak Notification in Delphi - ReportMemory Leak on Program Exit 27 Haziran2010PCRE Workbench - Regular Expression TestTool - Source Code Delphi Application 22Haziran 2010Deleting Dataset Records In a Loop - PollResults - Why All Records Are Not Deleted 21Haziran 2010Force TListViews Edit Mode using a KeyboardShortcut 17 Haziran 2010Implementing On Item Click Double Click forDelphis TListView control 16 Haziran 2010Run Your Delphi Application in Full Screen -Implement F11 - Full Screen 14 Haziran 2010Displaying Enumerated Properties in aSelectable List - Run-Time Enum Selection inDelphi 10 Haziran 2010How Do You Delete Dataset Records In aLoop 08 Haziran 2010Display Custom Hints for Status Bar Panels 07Haziran 2010

Sık Ziyaret Edilenler

Sayfa Home(16060)

Delphi ve Google Maps API(4132)

Delphi ve Google Maps API(1976)

0102030405060708091011121314151617181920212223242526272829

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServices namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Yukarıdaki kod oumlrneğimizde oumlncelikle SystemRuntimeInteropServices isimli alanı usingbloğuna eklediğimizi goumlruumlyorsunuz ComVisible attributersquounu kullanmak iccedilin bunu yapmak

Nedir bu Threadrsquolerden ccedilektiğimiz(1444)

Delphi amp Animated Flash Charts(Fusion Charts)(1179)

Delphi amp JavaScript Kardeşliği(936)

Delphi 2010 (Weaver) ve TValue(918)

Derinlemesine Threading(1)(889)

Derinlemesine Threading(2)(698)

Win32 amp Net(Delphi-gtC)(620)

Kategori Delphi(613)

Bir Kiosk ve CreateDesktop macerası(568)

Sayfa Hakkında(563)

TThreadWaitFor Bug(540)

Delphi 2010 (Weaver) ve TValue(530)

Oylama

Sitedeki makaleleri yararlı buluyor musunuz

Evet yararlı ama yetersiz

Evet son derece yararlı

Evet muumlkemmel

Hayır yararlı değil

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

public class SQLServerClass

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

durumundayız Ardından Smo namespacersquoi iccedilinde tanımlı olan Table isimli sınıfın ilgilendiğimizbirkaccedil tane propertyrsquosini tanımladığımız ITableInterface arabiriminin iccedilinde goumlruumlyorsunuz Buarabirim ComVisible ile işaretli durumda Biz ileride Delphi uumlzerinden yazdığımız C kodlarını

kullanırken arabirim referanslarına erişeceğiz

Ardından basit bir sınıf olan TableClass sınıfının ITableInterface arabirimini implemente ettiğinigoumlruumlyorsunuz Sizinde farkettiğiniz gibi bu sınıf ComVisible ile işaretlenmemiş Ccediluumlnkuuml biz busınıfa ilgili arabirimi uumlzerinden erişim sağlayacağız Dolayısı ile sınıfımız ITableInterfacersquoiimplemente ettiği iccedilin sadece arabirimi ComVisible ile goumlruumlnuumlr kılmak bizim iccedilin yeterliolacaktır

Buradaki anafikri anlamanız ccedilok oumlnemli Net framework altındaki kompleks yapıları COMortamından kullanabilmek iccedilin onların COM goumlruumlnuumlrluumlğuumlnuumln sağlanması gereklidir Biz buuygulamamızda Net frameworkrsquouumln Smo kuumltuumlphanesi iccedilindeki Table isimli sınıfı bu sebepledışarıya veremedik İlgili sınıfı(Table) ComVisible ile goumlruumlnuumlr kılamadığımız iccedilin biz de busınıfın sahte bir kopyasına bir arabirim oluşturduk ve o kopyayı goumlruumlnuumlr kıldık Meselenin oumlzuumlaslında sadece bu kadar Şimdi Sql Server 2005primee erişim sağlamasını duumlşuumlnduumlğuumlmuumlzsınıfımıza birer adet Connect ve Disconnect metodu yazmamız işimizi goumlrecek midir Evetserverrsquoa bağlanmak iccedilin serverrsquoın adına ve bağlantı şifresine ihtiyaccedil duyacağız ancak peki yahangi veritabanından ilgili tabloları alacağız

Bu noktada bizim iccedilin bir de Smo namespacersquoindeki Database sınıfına bir interfaceuydurmamız gerekecek Bu interfacersquode aşağıdaki gibi olacak

Hayır yararlı değil

Hayır hem yararlı değil hem de yetersiz

Hayır rezalet

Vote

View Results

Delphinin hangi suumlruumlmuumlnuuml kullanıyorsunuz

Delphi 5 yada oumlncesi

Delphi 6

Delphi 7

Delphi 8

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Vote

View Results

001002003004005006007008009010011012013014015016017018019020021022023

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110

111112113114115116117118119120121122

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

return ActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(string TableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Yukarıda IDatabaseInterface tanımını ve bu interfacersquoi implemente eden sınıfın tanımınıgoumlruumlyorsunuz Biz ilgili veritabanının tablolarına TableFromName ve TableFromIndex metodlarıile erişeceğiz Bu durumda artık son sınıfımız olan en başta tanımını boş olarak goumlrduumlğuumlnuumlzSQLServerClass sınıfını yazmaya başlayabiliriz Ancak bu sınıfımız iccedilinde bir interfacetasarlamamız ve ComVisible ile goumlruumlnuumlr kılmamız gerekiyor Tanım aşağıdaki gibi olacak

123124125126127128129130131132

133134135

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject) hTablesAdd(tblNamenew TableClass(tbl))

01020304

0506070809101112131415161718192021222324252627

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseNamestring UserName string Password)

void Disconnect()

IDatabaseInterface Database get public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Goumlruumllduumlğuuml gibi son derece basit bir yapıya sahip olan SQLServerClass sınıfımız ISQLLibraryinterfacersquoini implemente etmiş ve ISQLLibrary ComVisible ile goumlruumlnuumlr hacircle getirilmişKodumuzun nihai hali aşağıdaki gibi olacaktır

2829303132333435363738394041424344454647484950515253545556

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

Disconnect()

001002003004005006007008009010011012013014015016

using Systemusing SystemCollectionsGenericusing SystemText using MicrosoftSqlServerManagementSmousing MicrosoftSqlServerManagementCommonusing SystemRuntimeInteropServicesusing SystemCollections namespace SQLClassLibrary

[ComVisible(true)]public interface ITableInterface

DateTime CreateDate get string Name get

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066

string Name get long RowCount get int ColumnCount get int TriggerCount get

public class TableClass ITableInterface

private Table ActiveTable

public DateTime CreateDate

get

return ActiveTableCreateDate

public string Name

get

return ActiveTableName

public long RowCount

get

return ActiveTableRowCount

public int ColumnCount

get

return ActiveTableColumnsCount

public int TriggerCount

get

return ActiveTableTriggersCount

public TableClass(Table tbl)

ActiveTable = tbl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116

~TableClass()

Nesneleri yok etmeyi unutma GC ye guumlvenme

[ComVisible(true)]public interface IDatabaseInterface

int ActiveConnections get DateTime CreateDate get DateTime LastBackupDate get string Name get double Size get

int StoredProcedureCount get int TableCount get int UserDefinedFunctionCount get int ViewCount get

ITableInterface TableFromName(string TableName)ITableInterface TableFromIndex(int Index)

public class DatabaseClass IDatabaseInterface

private Database ActiveDatabaseprivate Hashtable hTables

public int ActiveConnections

get

return ActiveDatabaseActiveConnections

public string Collation

get

return ActiveDatabaseCollationset

ActiveDatabaseCollation = valueActiveDatabaseAlter()

public DateTime CreateDate

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161

162163164165

get

return ActiveDatabaseCreateDate

public DateTime LastBackupDate

get

return ActiveDatabaseLastBackupDate

public string Name

get

return ActiveDatabaseName

public double Size

get

return ActiveDatabaseSize

public int StoredProcedureCount

get

return ActiveDatabaseStoredProceduresCount

public int TableCount

get

return ActiveDatabaseTablesCount

public int UserDefinedFunctionCount

get

returnActiveDatabaseUserDefinedFunctionsCount

public int ViewCount

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

166167168169170171172

173174175176177178179180181182

183184185186187188189190191192193194195196197198199200201202203204

205206207208209210211212

get

return ActiveDatabaseViewsCount

public ITableInterface TableFromName(stringTableName)

return (ITableInterface)hTables[TableName]

public ITableInterface TableFromIndex(int Index)

ITableInterface Result = null

int iCounter = 0IDictionaryEnumerator TableEnum =

hTablesGetEnumerator()while (TableEnumMoveNext())

if (iCounter == Index)

Result = (TableClass)TableEnumValuebreak

iCounter += 1

return Result

public DatabaseClass(Database db)

ActiveDatabase = dbhTables = new Hashtable()

foreach (Table tbl in ActiveDatabaseTables)

if (tblIsSystemObject)hTablesAdd(tblName new TableClass(tbl))

[ComVisible(true)]public interface ISQLLibrary

bool Connect(string ServerName string DatabaseName PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261

string UserName string Password)void Disconnect()

IDatabaseInterface Database get

public class SQLServerClass ISQLLibrary

private Server srvprivate IDatabaseInterface CurrentDatabase

public IDatabaseInterface Database

get

return CurrentDatabase

public bool Connect(string ServerNamestring DatabaseNamestring UserNamestring Password

)

bool Result = false

srv = new Server(ServerName)srvConnectionContextLoginSecure = falsesrvConnectionContextLogin = UserNamesrvConnectionContextPassword = PasswordResult = true

if (Result)

Database db = srvDatabases[DatabaseName]CurrentDatabase = new DatabaseClass(db)

return Result

public void Disconnect()

srvConnectionContextDisconnect()

~SQLServerClass()

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Şimdi Visual Studio ortamında Ctrl+Shift+B tuşlarına basarak yada Build menuumlsuumlnden Buildseccedileneklerinden birisini seccedilerek derleme işlemi yaptığımızda Delphi tarafına geccedilmeye hazırızdemektir İlgili DLLrsquoimiz artık projemizi kaydettiğimiz yerde oluşturulduğu gibi projeayarlarından Com goumlruumlnuumlrluumlğuumlnuuml işaretlediğimiz iccedilin bu DLL aynı zamanda COM sistemineRegister edilmiş durumdadır Eğer elle register işlemi yapmak istiyorsanız o halde regasmkullanmak durumunda kalacaksınız Ancak şu anda bu işi Visual Studio bizim iccedilin yapmışdurumda Delphirsquomize geccedilip yeni bir proje accedilalım ve ProjectImport Type Library adımındanaşağıdaki goumlrselde goumlrebileceğiniz gibi ilgili DLLrsquoimizi listeden bulalım ve Create Unitrsquoebasalım

262263264265266

Disconnect()

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

SQLClassLibrary_TLBpas isimli dosyamız artık oluşmuş durumda Delphi oumlrneğimiz iseaşağıdaki gibi olacaktır

01020304050607080910

uses SQLClassLibrary_TLBprocedure TForm1Button1Click(Sender TObject)var

SqlServer ISQLLibrarybegin

SqlServer = CoSQLServerClassCreate as ISqlLibrarySqlServerConnect(TUGRUL BENIMDB sa )

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

15 Comments

Ferruh Koroglu on Haziran 21st 2009

Ccedilok guumlzel bir makale Tuğrul HocamEline sağlık

Tuğrul HELVACI on Haziran 21st 2009

Teşekkuumlr ederim beğenmenize sevindim

Olcay DAĞLI on Haziran 23rd 2009

Hocam yine guumlzel bir makale daha eline sağlıkhellip)

Oumlzetlemek gerekir ise Delphi Win32 projelerinde herhangi bir Net framework kuumltuumlphanesine

erişebilir ve onu kullanabilirsiniz Ancak ComVisible goumlruumlnuumlrluumlk durumuna dikkat ederek Sanırım şimdi makalemin başlarında belirttiğim CrossTalk ve Delphi Weaver iccedilinde Neterişimi oumlzelliklerinin ne derece oumlnemli olduğu daha accedilıktır

Saygılar sevgiler

[Translate]

11121314

15

16171819

ShowMessage(Format(Kayıt Sayısı=d Kolon Sayısı=d

[SqlServerDatabaseTableFromName(BenimTablom

)RowCountSqlServerDatabaseTableFromName(BenimTablom

)ColumnCount]) )

SqlServerDisconnectSqlServer = nil

end

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Tuğrul HELVACI on Haziran 23rd 2009 Teşekkuumlr ederim Olcay okuyan goumlzlerine sağlık

Nihal Alıcı on Ağustos 7th 2009

Ben bu makaleni yeni okudum Tuğrul gerccedilekten ccedilok faydalı guumlzelbir yazı olmuş Hani tam da ldquoDelphi ile hiccedil alakam kalmıyor artıkrdquodediğim zamanlarda yine aklıma bir kurt duumlşuumlrduumln yani ArtıkCodeGear bloglarını bile okumaz olmuştum tekrar başlasam mı

acaba Eline emeğine sağlık

Tuğrul HELVACI on Ağustos 7th 2009

Teşekkuumlr ederim nihal beğenmene sevindim Delphi biz onu bilerekve kasten oumllduumlrmeye teşebbuumls etmediğimiz suumlrece oumllecek gibi

goumlruumlnmuumlyor Bende yaşasın diye muumlmkuumln mertebe elimdengeleni nacizane yapma gayretindeyim Sen oku oku Delphi bloglarını

yine

Nurullah on Nisan 13th 2010

Hocam eline sağlık ccedilok guumlzel bir makale yanlız benim bir sorunum

var

SQLServerClass sınıfının tek constructor ı var olsun oda

Public SQLServerClass(string cnnString)

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

gibi olsun benim elimde bunun gibi bir oumlrnek var ve ben constructorın parametresini goumlnderemediğim iccedilin Class not registered hatasıalıyorum Bununla ilgili bir ccediloumlzuumlmuumln var mı

Tuğrul HELVACI on Nisan 13th 2010

Şu an deneme imkanım yok ama benim yaptığım gibi parametresizbir constructor kullanıp onun yerine ilgili parametreleri Connect gibibir metoda geccedilmeniz muumlmkuumln değil mi

Nurullah ERCANon Nisan 13th 2010

Valla DLL i yazan bizim muumlşterimiz Axapta entegrasyonu iccedilinyazılmış bir dll aslında soumlylediğinizin benzerini talep ettim Ama

muumlşteri derki değiştiremyiz Accedilıkcası en net kaynak bu duumln

akşamdan bu yana ara ara sonuccedil yok Ccedilıldırmak uumlzereyim Yardımcı olabilirsen ccedilok sevinirim

Tuğrul HELVACI on Nisan 13th 2010

Mail adresimi ziyaretccedili defterinden bulabilirsiniz Oraya konu ileilgili muumlmkuumln olan en detaylı accedilıklamayı iccedileren bir mail atabilirsenizeve gittiğimde elimden geldiğince yardımcı olabilirim

Nurullah ERCANon Nisan 13th 2010

Teşekkuumlrler hocam

Barış Kırgıccedil Hocam Merhaba

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Barış Kırgıccedil on Mayıs 6th 2010 Oumlncelikle harika bir kaynak sağlamışsınız teşekkuumlr ederim

Yukarıda dediğiniz gibi herşeyi yaptım Kendi yaptığım dll de hiccedilsorun yok

Aynı işi muumlşterinden istedim ve oda yaptı ve bana ldquoTLBrdquo filegoumlnderdi Register ettim fakatldquoClass not registeredrdquo hatası alıyorum

Sizce neden olabilir

Tuğrul HELVACI on Mayıs 6th 2010

Merhaba Barış bey acaba muumlşteriniz sınıf tasarımında ilgiliinterfacersquoleri COMVisible ile işaretlememiş olabilir mi Muumlşterinizin yazmış olduğu class libraryrsquoi bana mail ileulaştırabilirseniz daha net bir yorum yapabilirim Normalde sizindebileceğiniz uumlzere Net class libraryrsquoleri regasm yardımcı aracı ile ilgilisisteme kayıt ettirilirler ardından başka dillerde COMprogramlamanın kullanımına accedilık hale gelirler regasm ile sistemekayıt ettirilmemiş dllrsquoler iccedilin sınıf kaydedilmemiş(Class notregistered) gibi bir hata alabilirsiniz Muumlşterinizden ilgili dllrsquoi isteyipregasm ile bu dllrsquoi sisteme kayıt edip ardından Delphirsquoden importtype library ile import etmeyi denediniz mi

Tuumlm bunları denediğiniz halde hacircla aynı hata ile karşılaşıyorsanız ozaman başta belirttiğim gibi ilgili dllrsquoi yada muumlmkuumlnse dllrsquoin ckaynak kodlarını yollayabilirseniz fikir yuumlruumltmekte daha başarılıolabilirim

Taner İNEKCcedilİ on Mayıs 31st 2010

Hocam oumlncelikle verdiğiniz değerli bilgiler iccedilin ccedilok teşekkuumlrlerhellip

Ben yukarıda verdiğiniz tuumlm adımları visual basic ile uyguladım dlloluşturdum register ettim delphi ye import u gerccedilekleştirdimProjeme oluşturduğum unit i ekledim ancak ki visual basictayarattığım class taki proseduru mu gorebılıyorum ancakki projeyıderleyıpcalıstırdıgımda access violation hatası alıyorum sizce sebebi neolabilir

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

yardımcı olabilirseniz ccedilok sevinirim şimdiden teşekkuumlrler

Tuğrul HELVACI on Mayıs 31st 2010

Access Violation ccedilok genel bir hatadır Sıklıkla henuumlzoluşturulmamış(hafızada yer ayırılmamış) nesnelere erişimlerdeyada Free edilmiş ama hacircla hafızada anlamsız bir yeri goumlsterenişaretccedililer kullanıldığında karşılaşırsınız Soruna bu accedilıdan birbakmanızı oumlnerebilirim

Name (required)

Mail (required)

Website

Share your comment

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom

Son YorumlarYorumunuza teşekkuumlrler Aslında operatoumlr aşırıyuumlklemenin sınıf larda pek bir avantaj by TuğrulHELVACI

Merhaba Ben ilk olarak merakımdan dolayı uğraştığımC++ dilinde goumlrmuumlştuumlm Operatoumlr by Zafer Ccedilelenk

Merhaba makaleyi yazdığım zaman kodlarda bir sorunyoktu Belki Google Mapsde bir şeyler by TuğrulHELVACI

Merhaba Kodlarda bir sorun mu var yoksa ggogle buhizmeti durdurdu mu Sadece boş bir by ahmet

Programcı arkadaşların daha fazla takıldığı bir yerdeyazsa idiniz mesajınızı daha by Tuğrul HELVACI

Tuğrul Bey Yeri Burasımıdır Bilmiyorum O nedenlehata ediyorsam oumlzuumlr dilerm bir iş ilanı by geyikben

Teşekkuumlrler ) by Tuğrul HELVACI

Yeni EklenenlerYeni Veri Tipleri ve Operator Overloading

Interface Nedir Nerelerde ve Neden Kullanırız

Derinlemesine Threading(3)

SQLrsquode Benzerlik Algoritmalarıhellip

Full Text Searchinghellip

Delphi 2010 (Weaver) ve TValue

Derinlemesine Threading(2)

LinklerBir Tuumlrkccedile Sevdalısı - Taha EKREM

Delphi Tuumlrkiye Forum

Guumlrcan OumlZTUumlRK - Guumlrcan OumlZTUumlRK

MFatih KUumlCcedilUumlKKELEPCcedilE

Memik YANIK Kişisel

Memik YANIKrsquoın Guumlnluumlğuuml

Nick Hodges

Sinan BARAN

Copyright copy 2009 Delphi Programming Pow ered by WordPress | Increase Traff ic w ith Traff icWhirl

PDFmyURLcom