1 Son düzenleyen, konuka (29.01.2009 17:17:43)

Konu: DTOS in tersi var mı, helpde bulamadım

STOD() gibi bir fonksiyon arıyorum,
yoksa gene kazma kürek ile ekmeğimizi taştan mı çıkaracağız:

Visual Fox Pro
veli=DTOS(DATE())

?DATE(VAL(LEFT(veli,4)),VAL(SUBSTR(veli,5,2)),VAL(RIGHT(veli,2)))  && aradığım


ihtiyaç SQL EXP 2008 deki date fieldden doğdu, sorgu yaptığımızda tarih Date fieldi
2009-01-30 şeklinde karater dönüyor. 

Visual Fox Pro
SQLEXEC(m.lnGir,"SELECT tarih,tutar FROM nkt..nakit ORDER BY nakit" ,"curNakit")

CHRTRAN(curNakit.tarih,"-","")   && yapıp DTOS formatına getirebiliyorum....
VARTYPE(curNakit.tarih)='C'
VFP9 SP2

2 Son düzenleyen, ugurlu2001 (29.01.2009 18:14:20)

Re: DTOS in tersi var mı, helpde bulamadım

Umarım işini görür smile

Visual Fox Pro
? xDTOS(Date())

 
FUNCTION xDTOS
PARAMETERS lcDTOS
 
    LOCAL ldParam
 
    IF Pcount() <> 1 OR TYPE("lcDTOS") # 'D'
        MessageBox("Parametre Hatası")
    ENDIF
 
    ldParam    = SUBSTR(Dtos(Date()),1,4) + "-" + SUBSTR(Dtos(Date()),5,2) + "-" + SUBSTR(Dtos(Date()),7,2)
 
    RETURN ldParam
 
ENDFUNC
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: DTOS in tersi var mı, helpde bulamadım

DTOS() = DTOC(,1)
diye dusunursen:
STOD() yok ama CTOD() var:)

ANCAK, sana bu SQL icin gerekliyse SQL tarafindan dtos() sonucu dogrudan dogru olarak algilanir ve daha iyisi parametrik gondermek. SQL serverdan VFP'ye gelirken o sekilde geliyorsa arada bir cevrim var herhalde yoksa date gelmesi lazim.

set date to ymd
select cast(tarih as date) as tarih, tutar from curNakit

daha pratik cozum olabilir.

4 Son düzenleyen, konuka (30.01.2009 08:29:52)

Re: DTOS in tersi var mı, helpde bulamadım

cetinbasoz yazdı:

SQL serverdan VFP'ye gelirken o sekilde geliyorsa arada bir cevrim var herhalde yoksa date gelmesi lazim.


Visual Fox Pro
lnH = SQLSTRINGCONNECT("Driver=SQL server;server=.\SQLEXPRESS;Trusted_connection=yes")

?lnh
? SQLCOLUMNS(lnH , 'nkt..nakit', 'FOXPRO', 'MyCursor')
?SQLDISCONNECT(lnh)

MyCursor aşağıdaki şekilde geliyor, yani SQLde date type olan tarih fieldi C olarak ....
"REF" "N" 20 0
"TARIH" "C" 10 0
"TUTAR" "N" 20 2
"B04A59" "I" 4 0
"TAMAM" "I" 4 0
"KATID" "I" 4 0
"BIZID" "I" 4 0

daha ötesi CONVERT SQL olarak yolladığımda da C olarak dönüyor, yani galiba SQL2008 Date fieldi pek date gibi davranmıyor. denemek için 104 koydum DD.MM.YYYY formatını zorlamak için
zaten YYYY-MM-DD formatı olduğu sürece sort ve benzer işlemlerde gerekmiyor da :]

Visual Fox Pro
lnH = SQLSTRINGCONNECT("Driver=SQL server;server=.\SQLEXPRESS;Trusted_connection=yes")

?lnh
?SQLEXEC(lnh,"select CONVERT(date,tarih, 104) as tarih from nkt..nakit","curnakit")
?SQLDISCONNECT(lnh)
?VARTYPE(curnakit.tarih)


galiba yiğitlik bizde kalacak STOD() fonksiyonunu uyduracağız, sql de date fieldi 3 byt yer kaplıyor, smalldatetime 4byt . 1 byt için nelere katlanıyoruz .....  :}

VFP9 SP2

5

Re: DTOS in tersi var mı, helpde bulamadım

bir iş daha yaptım ve SQL2008 nakit dosyasına adı SMALLTARIH olan smalldate fieldi ekledim.
sonra sql içerisinden tarih (date) değerleri ile doldurdum.

SQL
UPDATE [nkt].[dbo].[nakit]

   SET [smalltarih] = [tarih]


smalldate bu sefer T olarak döndü !

Visual Fox Pro
? SQLCOLUMNS(lnH , 'nkt..nakit', 'FOXPRO', 'MyCursor')

sonuçları
"REF" "N" 20 0
"TARIH" "C" 10 0
"TUTAR" "N" 20 2
"B04A59" "I" 4 0
"TAMAM" "I" 4 0
"KATID" "I" 4 0
"BIZID" "I" 4 0
"SMALLTARIH" "T" 8 0

VFP9 SP2

6

Re: DTOS in tersi var mı, helpde bulamadım

Hata VFP'de sanirim, biraz bakayim donerim sana (varchar(max),xml tipleriyle sorun yasiyordu herhalde bu da bir baskasi, ben OLEDB tercih ediyorum)

7

Re: DTOS in tersi var mı, helpde bulamadım

deneme için bütün data tiplerinin olduğu bir table yaptım ve data girdim:

SQL
USE [deneme]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[fieldler](
    [fdate] [date] NULL,
    [fdatetime] [datetime] NULL,
    [fdatetime2] [datetime2](7) NULL,
    [fdatetimeoffset] [datetimeoffset](7) NULL,
    [fsmalldatetime] [smalldatetime] NULL) ON [PRIMARY]
 
INSERT INTO [deneme].[dbo].[fieldler]
           ([fdate] ,[fdatetime] ,[fdatetime2] ,[fdatetimeoffset] ,[fsmalldatetime])
     VALUES  (GETDATE() ,GETDATE() ,GETDATE() ,GETDATE() ,GETDATE())
GO

VPPdan sorgulayınca SQL2008e özgü yenilikler data tipleri date, datetime2 ve datetimeoffset hepsi Character dönüyor. Muhtemelen VFP SP3 yakında .... sevgiler

"FDATE","C",10,0
"FDATETIME","T",8,0
"FDATETIME2","C",27,0
"FDATETIMEOFFSET","C",34,0
"FSMALLDATETIME","T",8,0

Visual Fox Pro
lnx = SQLSTRINGCONNECT("Driver=SQL server;server=.\SQLEXPRESS;Trusted_connection=yes")

?SQLEXEC(lnx,"select * from deneme..fieldler", "cursdeneme")
?SQLCOLUMNS(lnx,"deneme..fieldler", 'FOXPRO',"curscol")
?SQLDISCONNECT(lnx)
VFP9 SP2

8

Re: DTOS in tersi var mı, helpde bulamadım

konuka yazdı:

...sql de date fieldi 3 byt yer kaplıyor, smalldatetime 4byt . 1 byt için nelere katlanıyoruz .....  :}


iyi de eskiden hard disk sorunu vardı tamam ama şimdi öyle bir sorun yok ki. sql server eğer bir server a sığmazsa birden fazla server ve hard disk birbirine bile bağlanabiliyor. ne gereği var? datetime kullan gitsin...

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

9

Re: DTOS in tersi var mı, helpde bulamadım

Iste yardim diye buna derim, sagol hazir tablo kodu icin. Onun sayesinde hata cikti ortaya. Sen SQL server driver kullaniyorsun. O 2000 driveri ve yeni tiplerden bi haber. Bu sefer suc VFP de degilmis:)

Visual Fox Pro
handle = SQLSTRINGCONNECT('Driver={SQL Server Native Client 10.0};'+;

   'Server=.\sql2008;Database=deneme;Trusted_Connection=yes;')
SQLEXEC(m.handle, 'select * from fieldler','myCursor')
SQLDISCONNECT(0)
SELECT myCursor
LIST STRUCTURE
BROWSE

10 Son düzenleyen, konuka (31.01.2009 04:05:16)

Re: DTOS in tersi var mı, helpde bulamadım

Sevgili Çetin
çok teşekkür ederim.
bende komut aşağıdaki şekli ile çalıştı. (ek: Authentication=Windows ilk defasında gerekli olduğunu deneme yanılma buldum)

Visual Fox Pro
handle = SQLSTRINGCONNECT( 'Driver={SQL Server Native Client 10.0}; ';

                          +'Server=.\SQLEXPRESS; ';
                          +'Authentication=Windows; ';
                          +'Trusted_Connection=yes; ')


ancak tekrar bağlandığımda senin kodun çalışmaya başladı.

BİR DE : sql servere konuştuğumuz 3 bağlanma metodu var, yukardakine ilaveten cursoradapter ve OLEDB
forumda defalarca geçtiğini hatırlıyorum, gün boyu inceledim, ama tam kavrayamadım (toparlayamadım).
boş bir vaktinde tek başlıkta derleyebilirmisin ?

VFP9 SP2