Konu: MS SQL 2005 datetime tipinin date e çevirme
Selamlar;
MS SQL 2005 üzeirnden ve ya VFP 9 dan otomatik olarak datetime tipinin date e nasıl çevirebilirim?
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
Selamlar;
MS SQL 2005 üzeirnden ve ya VFP 9 dan otomatik olarak datetime tipinin date e nasıl çevirebilirim?
cursoradapter kullan ve tipini date seç.
cursoradapter kullan ve tipini date seç.
Ufak bir örnek verebilirmisiniz?
Local loCursor, lcConStr
lcConStr = 'Provider=SQLNCLI;Trusted_connection=Yes;Server=.\SQLExpress'
loCursor = Createobject('CaGeneric','ADO',m.lcConStr)
With loCursor
.Alias = 'myTable'
.CursorSchema = 'employeeID int, firstName varchar(10), lastName varchar(20),'+;
' birthDate date, hireDate date,title varchar(30)'
TEXT TO .SelectCmd noshow
SELECT employeeID,firstName,lastName,birthDate,hireDate,title
FROM NorthWind..Employees emp
ENDTEXT
Endwith
If loCursor.CursorFill(.T.,.F.,0,loCursor.oCommand)
Select (loCursor.Alias)
loCursor.MakeUpdatable('NorthWind..Employees','employeeId')
Browse Last
Tableupdate(2,.T.,loCursor.Alias)
Else
Messagebox(loCursor.GetErrorExplanation())
Endif
Define Class CaGeneric As CursorAdapter
CompareMemo = .F.
FetchAsNeeded = .T.
FetchSize = 100
FetchMemo = .T.
BatchUpdateCount = 100
WhereType = 1
AllowSimultaneousFetch = .T.
MapVarchar = .T.
MapBinary = .T.
BufferModeOverride = 5
*!* * Nodata = .T.
Handle = 0
Procedure AutoOpen
If Not Pemstatus(This, '__VFPSetup', 5)
This.AddProperty('__VFPSetup', 1)
This.Init()
Endif
Endproc
Procedure Init(tcType,tcConnectionString)
Local llReturn
Do Case
Case Not Pemstatus(This, '__VFPSetup', 5)
This.AddProperty('__VFPSetup', 0)
Case This.__VFPSetup = 1
This.__VFPSetup = 2
Case This.__VFPSetup = 2
This.__VFPSetup = 0
Return
Endcase
Set Multilocks On
llReturn = DoDefault()
This.DataSourceType = m.tcType
Store This.DataSourceType To ;
this.InsertCmdDataSourceType, ;
this.UpdateCmdDataSourceType, ;
this.DeleteCmdDataSourceType
***<DataSource>
Do Case
Case Upper(This.DataSourceType) == "ODBC"
This.Handle = Sqlstringconnect(m.tcConnectionString)
Store This.Handle To ;
This.Datasource,;
This.InsertCmdDataSource,;
This.UpdateCmdDataSource,;
This.DeleteCmdDataSource
Case Upper(This.DataSourceType) == "ADO"
Local loConnDataSource
loConnDataSource = Createobject('ADODB.Connection')
***<DataSource>
loConnDataSource.ConnectionString = m.tcConnectionString
***</DataSource>
loConnDataSource.Open()
This.Datasource = Createobject('ADODB.RecordSet')
This.Datasource.CursorLocation = 3 && adUseClient
This.Datasource.LockType = 3 && adLockOptimistic
This.Datasource.ActiveConnection = loConnDataSource
*** End of Select connection code: DO NOT REMOVE
loCommand = Createobject('ADODB.Command')
loCommand.ActiveConnection = loConnDataSource
This.AddProperty('oCommand',loCommand)
This.UpdateCmdDataSource=loCommand
This.InsertCmdDataSource=loCommand
This.DeleteCmdDataSource=loCommand
Case Upper(This.DataSourceType)="NATIVE" && Not implemented
Case Upper(This.DataSourceType)="XML" && Not implemented
Endcase
***</DataSource>
If This.__VFPSetup = 1
This.__VFPSetup = 2
Endif
Return llReturn
Endproc
Procedure MakeUpdatable(tcTableName,tckeyField,tlDoNotIncludeKey)
This.Tables = m.tcTableName
This.KeyFieldList = m.tckeyField
Local ix, lnUpdateableFCount
lnUpdateableFCount = Fcount(This.Alias)-Iif(This.DataSourceType='ADO',1,0) && last one is ADOBOOKMARK
For ix = 1 To m.lnUpdateableFCount
If !m.tlDoNotIncludeKey Or !(Upper(Field(m.ix,This.Alias,0)) == Upper(m.tckeyField))
This.UpdatableFieldList = This.UpdatableFieldList + ;
IIF(Empty(This.UpdatableFieldList),'',',') + ;
FIELD(m.ix,This.Alias,0)
Endif
This.UpdateNameList = This.UpdateNameList + ;
IIF(Empty(This.UpdateNameList),'',',') + ;
TEXTMERGE('<<FIELD(m.ix,this.Alias,0)>> <<m.tcTableName>>.<<FIELD(m.ix,this.Alias,0)>>')
Endfor
Endproc
Procedure QueryFill()
Local llSuccess
If This.DataSourceType ="ADO"
llSuccess = This.CursorFill(.F.,.F.,0,This.oCommand)
Else
llSuccess = This.CursorFill(.F.)
Endif
If !m.llSuccess
If This.DataSourceType ="ADO"
lcMessage = This.oCommand.CommandText + Chr(13) + This.GetErrorExplanation()
Else
lcMessage = This.GetErrorExplanation()
Endif
Messagebox(m.lcMessage)
Endif
Return m.llSuccess
Endproc
Procedure GetErrorExplanation
Local lcError,ix
Local Array aWhy[1]
Aerror(aWhy)
lcError = ""
For ix = 1 To 7
lcError = m.lcError + Transform(aWhy[m.ix]) + Chr(13)
Endfor
Return m.lcError
Endproc
Enddefine
takılmadan edemiycem... örnek baya bir ufak olmuş
LOCAL lcAdapter
lcAdapter=CREATEOBJECT("cursoradapter")
lcAdapter.DataSourceType="ODBC"
lcAdapter.DataSource=ovars.sqlhandle
lcAdapter.KeyFieldList="guid"
lcAdapter.FetchSize=-1
lcAdapter.FetchSize=100
lcAdapter.FetchAsNeeded=.F.
lcAdapter.Alias="stokhar"
lcAdapter.Tables="stokhar"
lcAdapter.WhereType= 1
*------------- cursorschema ---------------------
lcAdapter.CursorSchema="kod char(20),pasifkod char(20),cinsi varchar(40),tarih d"
*------------- selectcmd ------------------------
lcAdapter.SelectCmd="select kod,pasifkod,cinsi,tarih from stokhar"
*------------- updatenamelist -------------------
lcAdapter.UpdateNameList="kod stokhar.kod,pasifkod stokhar.pasifkod,cinsi stokhar.cinsi,tarih st"
lcAdapter.UpdateNameList=lcAdapter.UpdateNameList+"okhar.tarih"
*------------- updatablefieldlist ---------------
lcAdapter.UpdatableFieldList="kod,pasifkod,cinsi,tarih"
lcAdapter.Cursorfill(.t.)
RETURN lcAdapter
Ornek aslinda ufak:) Yaninda ikramiyesi jenerik cursoradapter var.
o zaten belli de. işin başındaki birisi için ayıklamak zor olabilir...
peki birşey soracam. ado'yu kullanınca cursoradapter'de bir artısı oluyor mu? oluyorsa ne?
Arka planda neler olduğu yada nasıl olduğu hakkında pek bilgim yok; ama bilenlerin söylediği şu: "ADO.NET" ile yapılan işlemler; OleDB yada ODBC ye göre çok daha performanslı.
Selamlar;
Bu ufak kodu deneyip bilgi vereceğim. Çok teşekkürler.
Arka planda neler olduğu yada nasıl olduğu hakkında pek bilgim yok; ama bilenlerin söylediği şu: "ADO.NET" ile yapılan işlemler; OleDB yada ODBC ye göre çok daha performanslı.
daha yavaş olması gerekir. çünkü ado odbc'nin üzerine bir ek katmanmış...
ADO daha yuksek seviyeli bir API. Daha hizli olmak gibi bir iddiasi yok. Sadece ODBC ile halledilemeyen bazi yenilikleri de destekliyor (ornegin multivalue field, hiyerarsik dataset, XML'e kaydetme ve okuma, tablo/kayit gibi yaratma ...). MS ADO'ya ODBC'den fazla onem veriyor ve gelecekte OLEDB (ADO) destegi artarken, ODBC desteginde azalma en azindan benim algiladigim gelisme. Eskiden bazi seylerin OLEDB driverini bulmak daha zordu, simdi OLEDB driver daha fazla, ODBC driver yok. ADO baslibasina bir dil sayilabilir de.
(ADO'nun arkasinda fox takiminin olmasi da cabasi:)
benim demek istediğim cursoradapter'i ado ile kullanınca bize ne ek faydası oluyor? ado'nun bu bahsettiğin şeylerini kullanabiliyor muyuz? bir de:
multivalue field
hiyerarşik dataset
tablo/kayıt gibi yaratma
ne demek bunlar?
ODBC driveri olmayip OLEDB driveri olanlara da ulasiyorsun.
Multivalue field: Cok degerli alan. Ayni alanda birden fazla deger tutuluyor
Hierarsik dataset: Customer/Orders/OrdItems gibi yapi
Tablo/Kayit adi ustunde, memoryde cursor benzeri ADO tablo.