1

Konu: foxpro ile sql server bağlantısı

merhaba arkadaşlar öncelikle bu sitede emeği geçen herkeze çok teşekkür ediyorum.
arkadaşlar foxpro ile sql server bağlantısı nasıl yapılabilir

2

Re: foxpro ile sql server bağlantısı

lnHandle = SQLSTRINGCONNECT("Driver=SQL server;server=.\SQLEXPRESS;Trusted_connection=yes")
SQLEXEC(m.lnHandle,"select * from AdventureWorks.HumanResources.Employee","myCursor")
SQLDISCONNECT(m.lnHandle)
browse

3 Son düzenleyen, alfonso (16.02.2007 11:19:13)

Re: foxpro ile sql server bağlantısı

sayın çetin hocam;
foxproda open database deyip database açıp use komutu ile tablelara ulaşabiliyoruz
sql ile nasıl bir yol izlememiz gerekiyor

4

Re: foxpro ile sql server bağlantısı

O ornek:

use AdventureWorks!Employee

gibi:) SQL server'a ulasip datasini kullanmanin birden fazla yolu var. O yazdigim ornek SPT (SQL Pass Through). RV (RemoteView) veya CA (CursorAdapter) kullanabilirsin. CA'nin extra avantajlari var, ODBC yerine ADO baglanti kullanabilmek, schema ayarlari yapabilmek gibi.

SQL 2005'te AdventureWorks database'i ornek olarak geliyor ondan oyle yazdim. Dikkat et SQL server'da 3 (nadiren 4) parcali isimlendirme kullaniliyor:

AdventureWorks.HumanResources.Employee

yani:

Database.Schema.Table

gibi. SQL2000'de de oyle (schema yerine owner diye geciyor) ancak genelde sadece dbo kullanldigi icin insanlar:

Northwind..Employees

ya da:

Employess yaziyor (Northwind zaten aktif database ise - connectionstringte ya da sonradan:

SQLExec( m.lnHandle, "use AdventureWorks") && Foxtaki open database
SQLExec( m.lnHandle, "select * from HumanResources.Employee", "myCursor")


SQL baglantisi diye sormussun ben de hizli basit bir ornegini verdim. Cok derin konu, spesifik sorulara cevabi ancak kaldiriyor.

VFP9'da Data Explorer'i acarsan o senin icin cogunu otomatik yapiyor. Ya da Database'de Remote view.

5

Re: foxpro ile sql server bağlantısı

ADO kullanmanın ne avantajı var?

cetinbasoz yazdı:

...CA'nin extra avantajlari var, ODBC yerine ADO baglanti kullanabilmek, ...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

6

Re: foxpro ile sql server bağlantısı

Bilmem herhalde destegi daha cok diye seviyorum. Mesela SQL2005 ornek database'lerine ODBC ile erisitiginde XML datatipi alanlari sacmaliyor. ADO gayet guzel isliyor. Driver hatasi olabilir, VFP hatasi yerine ama oyle ya da boyle ADO hemen hemen her zaman daha iyi calisan. Ayrica stored procedure cagirmak ADOda kolay ve calisiyor. ODBC'de driverdan driver'a calisiyor (driver meselesi ama sonucta OLEDB'lerle calistigina gore driver destegi daha iyi). Bazi seylerin hic ODBC driveri yok bile (ornegin VFP9).
ADO'yiu baglayabildigin yesr daha cok. ADO hierarchical datasetleri ve multivalued degerleri destekliyor vs vs. ODBCyi kimin icat edip gelistirdigini bilmiyorum, ADO'yu fox takiminin yaptigini biliyorum (belki de duygusal faktor:)

7

Re: foxpro ile sql server bağlantısı

ben bu teknik konulardan anlamıyorum ama biryerde okumuştum ado dediğin odbc üzerine yapılmış bir kabuk diye. yanlış mı?
bir de cursoradapter class içinden ado ile nasıl stored procedure çağırıyorsun?

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

8

Re: foxpro ile sql server bağlantısı

Evet birisi daha yuksek seviyeli API. Ama sonucta ODBC driverlar yerini ADO'ya bıraktı gibi. Cogu saglayıcı artık ODBC driverlarini guncellemiyor (VFP tipik ornek).
ADO'nun connection, recordset objeleri yanı sıra command, parameter gibi objeleri de var:
-Connection kur
-Command objesi yarat
-CommandTYpe'ini stored procedure'a kurup CoomandText'ine SP adını yaz
-Parametrelerini ekle (input,output ve return)
-Command.execute (bu recordset donduruyor)
-Donen RS CA'nın datasource'u (select icin)
-Stored procedure yonteminde insert/update/delete icin farklı stored procedure'lar kullanabilirsin

Tam bir CA ornegi veremiyorum cunku CA kullanmıyorum.

9

Re: foxpro ile sql server bağlantısı

cetinbasoz yazdı:

...
Tam bir CA ornegi veremiyorum cunku CA kullanmıyorum.


createobject ile nesnesini mi oluşturuyorsun? eğer ca kullanmıyorsan oluşturduğun cursor u nasıl updatable hale getiriyorsun? kullandığın yöntemin örneğini verebilir misin?

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

10

Re: foxpro ile sql server bağlantısı

Universalthread:

<B>Re: ADO and cursoradaptor problem! Anybody??</B> Thread #906520 Message #906597
<B>Re: CursorAdapter with SQL and parameter</B> Thread #944961 Message #944968
Aleksey'in mesajını okumayı ihmal etme.

11

Re: foxpro ile sql server bağlantısı

UT de PUTM olmadigim icin bu threadlari okuyamadim sad
buraya copy + paste etme sansin olursa cok faydali olur

12

Re: foxpro ile sql server bağlantısı

İlki:

Visual Fox Pro
#Define SQLCONNECTION     "Provider=SQLOLEDB.1;Integrated Security=SSPI;"+;

    "Persist Security Info=False;"+;
    "Initial Catalog=Northwind; Data Source=ServerNAME"
 
*!* ADO CursorAdapter
oXC1 = Createobject('xcADOUpdatable', "vcustomers", SQLCONNECTION, ;
    "select * from customers",;
    "Customers",;
    "CustomerID",;
    "CustomerID, CompanyName, ContactName, ContactTitle",;
    "CustomerID customers.CustomerID, "+;
    "CompanyName customers.CompanyName,"+;
    "ContactName customers.ContactName,"+;
    "ContactTitle customers.ContactTitle")
 
 
CursorSetProp("Buffering",5,'vcustomers')
Browse Title 'Before modification'
If ( !Tableupdate(2,.T.,'vcustomers') )
    oXC1.DispError()
Else
    oXC1.CursorFill()
    Browse Title 'After Tableupdate'
Endif
 
Define Class xcADOUpdatable As CursorAdapter
    AllowUpdate = .T.
    AllowInsert = .T.
    AllowDelete = .T.
    Procedure Init
    Lparameters tcAlias,tcConn, tcSQL,tcTables,;
        tcKeyFieldList,tcUpdatableFieldList,tcUpdateNameList
    This.AddProperty('oConn', Newobject("ADODB.Connection"))
    This.AddProperty('oRS',   Newobject("ADODB.Recordset"))
    With This.oConn
        .ConnectionString = tcConn
        .Mode = 16  && adModeShareDenyNone
        .Open()
    Endwith
    With This.oRS
        .ActiveConnection = This.oConn
        .LockType=3  && adLockOptimistic
        .CursorLocation = 3  && adUseClient
        .CursorType = 2  && adOpenDynamic
    Endwith
    With This
        .Alias = tcAlias
        .Tables = tcTables
        .KeyFieldList = tcKeyFieldList
        .UpdatableFieldList = tcUpdatableFieldList
        .UpdateNameList = tcUpdateNameList
        .WhereType = 1
        .UpdateType= 1
        .SendUpdates = .T.
        .DataSourceType = "ADO"
        .Datasource = This.oRS
        .SelectCmd = tcSQL
        .CursorFill()
    Endwith
    Endproc
 
    Procedure DispError
    Local Array errors(1)
    Local lcError
    Aerror(errors)
    lcError = 'Error--------------'
    For ix=1 To 7
        lcError = lcError + Chr(13)+Transform(errors[ix])
    Endfor
    lcError = lcError + Chr(13) + 'Error--------------'
    Messagebox(lcError)
    Endproc
Enddefine

13

Re: foxpro ile sql server bağlantısı

2.:

Visual Fox Pro
*Sample form

#Define SQLCONNECTION     "Provider=SQLOLEDB;Integrated Security=SSPI;"+;
  "Persist Security Info=False;"+;
  "Initial Catalog=Northwind; Data Source=servername"
 
oForm = Createobject('myForm',SQLCONNECTION)
oForm.Show
Read Events
 
Define Class myForm As Form
  DataSession = 2
  Height = 300
  Width = 800
  Add Object Grd1 As myGrid With Height = 300, Width = 400
  Add Object Grd2 As Grid With Height = 300, Width = 400, Left = 400
 
  Procedure Init
  Lparameters tcConn
  This.AddProperty('oConn', Newobject("ADODB.Connection"))
  With This.oConn
    .ConnectionString = tcConn
    .Mode = 16
    .Open()
  Endwith
  This.AddProperty('Dataenvironment',Createobject('myDataEnvironment', This.oConn))
  This.Grd1.RecordSource = 'ca_customers'
  This.Grd2.RecordSource = 'ca_orders'
  Endproc
 
  Procedure QueryUnload
  Clear Events
  Endproc
  Procedure Destroy
  Endproc
 
  Procedure DispError
  Local Array errors(1)
  Aerror(errors)
  ? 'Error--------------'
  For ix=1 To 7
    ? errors[ix]
  Endfor
  ? 'Error--------------'
  Endproc
 
Enddefine
 
Define Class myDataEnvironment As DataEnvironment
  Procedure Init
  Lparameters toConn
  With This
    .AddObject('caCustomers','myADOAdapter',toConn,'ca_customers')
    With .caCustomers
      .Tables = "Customers"
      .KeyFieldList = "CustomerID"
      .UpdatableFieldList = "CustomerID, CompanyName, ContactName, ContactTitle"
      .UpdateNameList = ;
        "CustomerID customers.CustomerID, "+;
        "CompanyName customers.CompanyName,"+;
        "ContactName customers.ContactName,"+;
        "ContactTitle customers.ContactTitle"
      .SelectCmd = "select * from customers"
      .CursorFill()
    Endwith
    .AddObject('caOrders','myADOAdapter',toConn,'ca_orders')
    With .caOrders
      .Tables = "Orders"
      .KeyFieldList = "ORDERID"
      .UpdateNameList = "CUSTOMERID Orders.CUSTOMERID, "+;
        "EMPLOYEEID Orders.EMPLOYEEID,"+;
        "FREIGHT Orders.FREIGHT,"+;
        "ORDERDATE Orders.ORDERDATE,"+;
        "ORDERID Orders.ORDERID"
      .UpdatableFieldList = "CUSTOMERID, EMPLOYEEID, FREIGHT, ORDERDATE, ORDERID"
      .CursorSchema = "CUSTOMERID C(5), EMPLOYEEID I, FREIGHT Y, ORDERDATE D, ORDERID I"
 
      .AddProperty('oCommand', Newobject('ADODB.Command') )
      With .oCommand
        .CommandText = "select Orders.CustomerID, Orders.EmployeeID, "+;
          "Orders.Freight, Orders.OrderDate, Orders.OrderID"+;
          " from Orders"+;
          " where customerID = ?"+;
          " order by employeeID, orderdate desc"
        .Parameters.Append( .CreateParameter("CustomerID", 129,1,10,ca_customers.customerID) )
      Endwith
      .oCommand.ActiveConnection = .Datasource.ActiveConnection
      .AddProperty( 'oRS', .oCommand.Execute() )
      .CursorFill(.T., .F., 0, .oRS)
    Endwith
  Endwith
  Endproc
Enddefine
 
Define Class myGrid As Grid
  Procedure AfterRowColChange
  Lparameters nColIndex
  With Thisform.DataEnvironment.caOrders
    .oRS.ActiveCommand.Parameters("CustomerID") = ca_customers.customerID
    .CursorRefresh()
  Endwith
  Thisform.Refresh()
  Endproc
Enddefine
 
Define Class myADOAdapter As CursorAdapter
  AllowUpdate = .T.
  AllowInsert = .T.
  AllowDelete = .T.
  WhereType = 1
  UpdateType= 1
  SendUpdates = .T.
  DataSourceType = "ADO"
 
  Procedure Init
  Lparameters toConn, tcAlias
  With This
    .Alias = tcAlias
    .Datasource = Newobject("ADODB.Recordset")
    With .Datasource
      .ActiveConnection = toConn
      .LockType=4
      .CursorLocation = 3
      .CursorType = 2
    Endwith
  Endwith
  Endproc
 
  Procedure UpdateTable
  This.Datasource.Updatebatch()
  Endproc
Enddefine

14

Re: foxpro ile sql server bağlantısı

Aleksey Tsingauz'dan:

Visual Fox Pro
CLOSE DATABASES ALL 

CLEAR
 
customerid='ALFKI'
 
LOCAL oCA as CursorAdapter
 
oCA=CREATEOBJECT("CursorAdapter")
oCA.SelectCmd="select * from Northwind..Orders where customerID = ?m.customerid"
 
?"ODBC"
oCA.DataSourceType="ODBC"
oCA.DataSource=SQLCONNECT("localServer")
 
IF oCA.DataSource<1
    ?"Failed to connect."
ELSE
    ?oCA.CursorFill()
    LIST
    USE
    SQLDISCONNECT(oCA.DataSource)
ENDIF
 
?
?"ADO"
 
LOCAL oConn as ADODB.Connection, oRS as ADODB.Recordset, oCom as ADODB.Command
 
oConn=CREATEOBJECT("ADODB.Connection")
oConn.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=(local)")
 
oRS = CREATEOBJECT("Adodb.RecordSet")
oRS.ActiveConnection = oConn
 
oCom = CREATEOBJECT("Adodb.Command")
oCom.ActiveConnection = oConn
 
oCA.DataSourceType="ADO"
oCA.DataSource=oRS
 
?oCA.CursorFill(,,,oCom)
LIST
USE

15 Son düzenleyen, altun (26.02.2007 00:40:02)

Re: foxpro ile sql server bağlantısı

soykanozcelik yazdı:

UT de PUTM olmadigim icin bu threadlari okuyamadim sad
buraya copy + paste etme sansin olursa cok faydali olur


www.universalthread.com/wconnect/wc.dll?2,15,944968

Formatına uygun olarak mesajid numarasını sonuna eklersen okuyabilirsin.

16

Re: foxpro ile sql server bağlantısı

tesekkurler Ali o sekilde denememistim smile