1

Konu: Sql Komut Hatası

A1=SQLExec(m.lnHandle,[insert into CARHAR( ;
CARHARTAR,CARHARREFNO,CARHARTIPI,CARHARKAYONC,CARHARKAYNAK, ;
CARHARCARKOD,CARHARCARUNVAN,CARHARSIRANO,CARHARISTIPNO, ;
CARHARISTIPKOD,CARHAREVRAKNO) ;
values('09.03.2012','78','2','2','8','01','ERCAN','1','8','FATURA','123')])

Yukarıdaki Kod Çalışıyor. Burada 11 Tane Field var.

Ancak Benim Tablomda 13 Adet Field Var.
11 den sonrasını ekleyince ;

A1=SQLExec(m.lnHandle,[insert into CARHAR(;
CARHARTAR,CARHARREFNO,CARHARTIPI,CARHARKAYONC,CARHARKAYNAK,;
CARHARCARKOD,CARHARCARUNVAN,CARHARSIRANO,CARHARISTIPNO,;
CARHARISTIPKOD,CARHAREVRAKNO,CARHARACIKLAMA,CARHARTUTAR);
values('09.03.2012','78','2','2','8','01','ERCAN','1','8','FATURA','123','DENEME','998')])

Şeklinde Yazınca

Command Contains unrecognized pharese/keyword
hatası veriyor.

Bu konuda acil yardıma ihtiyacım var.

2

Re: Sql Komut Hatası

sorun SQL syntaxta 255 karakter sınırına dayanmak sanırım asagidaki gibi halledebilirsin

Visual Fox Pro
TEXT TO m.lcSQL TEXTMERGE NOSHOW

    Insert Into CARHAR(;
    CARHARTAR,CARHARREFNO,CARHARTIPI,CARHARKAYONC,CARHARKAYNAK,;
    CARHARCARKOD,CARHARCARUNVAN,CARHARSIRANO,CARHARISTIPNO,;
    CARHARISTIPKOD,CARHAREVRAKNO,CARHARACIKLAMA,CARHARTUTAR);
    values('09.03.2012','78','2','2','8','01','ERCAN','1','8','FATURA','123','DENEME','998')
ENDTEXT
 
A1=SQLExec(m.lnHandle,m.lcSQL)

3

Re: Sql Komut Hatası

Soykan Bey Teşekkürler.
Sadece küçük bir değişiklik yaptık.
Values kısmını Text Endtext dışına aldık. Çünkü & parametreli değerler var. Hata Verdi.

4

Re: Sql Komut Hatası

parametrik kısımlarıda tipine gore text..endext arasinda <<m.lnp1>> '<<m.lcp2>>' gibi kullanabilirsin bu sayede dis tarafa birsey almak zorunda kalmazsiniz.

5

Re: Sql Komut Hatası

Bunu Bilmiyordum. Tekrar Teşekkürler.

6

Re: Sql Komut Hatası

ornek asagida path bilgisi text..endtext e parametrik gidiyor...

Visual Fox Pro
If _vfp.StartMode = 0

    m.gcPath = [d:\soykan\mysoftware\depomatik\z_atik_2012]
    Set Century On
    Set Date Dmy
Endif
 
TEXT TO m.lcSQL NOSHOW TEXTMERGE
    Select kod,tanim from;
    ADDBS('<<m.gcPath>>')+'depo';
    into curs CrsCboDepo nofilter
ENDTEXT
Execscript(m.lcSQL)

7

Re: Sql Komut Hatası

Yeni bir bilgisayarda ya da format sonrası kurulumda bölgesel ayarlarda kuruşlar virgülle, binlikler nokta ile gösteriliyor.  Sql de update yaparken kuruşlar virgülle geldiği için hata verdi. set pointer ile kuruşları nokta yaptım ve düzeldi. set pointeri kullanmadan sql in kuruşlar virgülle olsa bile hata vermemesini nasıl sağlayabilirim. Yani noktalar virgülde olsa nokta da olsa sql işlemleri hatasız yapsın istiyorum. Teşekkürler.

8

Re: Sql Komut Hatası

Bircok yerde SQL server'a asla boyle data gondermemelerini soyluyorum, burada da tekrarlamak boynumun borcu:) Buradaki degerlerin elle yazilmadigi asikar, bir yerden geliyor, bir yerden gelmesi demek SQL server'in "SQL Injection Attack" yani SQL kod ejekte eden saldirilara acik olmasi demek. Onlemek de son derece basit. Parametre kullanmak onluyor. Arti, parametre kullandiginizda ek bazi problemler onleniyor, nokta/virgul kullanilmis olmasi, string veri icinde tek/cift tirnak kullanilmasi, tarih formatlari, sayilar vs. Niye onlari SQL serverin anlayacagi stringe cevirmekle ugrasacaksin ki. Birak cevirimi suruculer yapsin. Mesela 9.3.2012'yi SQL server nasil anlayacak? Garanti mi onu 9 Mart 2012 diye anlamasi (degil, pekala 3 Eylul 2012 olarak da algilanabilir, sadece birisinin SQL serverdaki dateformat degerini degistirmesine bakar - isini saglama bagla, date/time degerlerini date/time gonder, stringe filan cevirme).

Visual Fox Pro
TEXT TO m.lcSQL TEXTMERGE NOSHOW

    Insert Into CARHAR(
    CARHARTAR,CARHARREFNO,CARHARTIPI,CARHARKAYONC,CARHARKAYNAK,
    CARHARCARKOD,CARHARCARUNVAN,CARHARSIRANO,CARHARISTIPNO,
    CARHARISTIPKOD,CARHAREVRAKNO,CARHARACIKLAMA,CARHARTUTAR)
    values
   (?m.CARHARTAR,?m.CARHARREFNO,?m.CARHARTIPI,?m.CARHARKAYONC,?m.CARHARKAYNAK,
    ?m.CARHARCARKOD,?m.CARHARCARUNVAN,?m.CARHARSIRANO,?m.CARHARISTIPNO,
    ?m.CARHARISTIPKOD,?m.CARHAREVRAKNO,?m.CARHARACIKLAMA,?m.CARHARTUTAR)
ENDTEXT
 
CARHARTAR = date(2012,3,9)
CARHARREFNO = 78
CARHARTIPI = 2
CARHARKAYONC = 2
CARHARKAYNAK = 8
CARHARCARKOD = '01'
CARHARCARUNVAN = 'ERCAN'
CARHARSIRANO = 1
CARHARISTIPNO = 8
CARHARISTIPKOD = 'FATURA'
CARHAREVRAKNO = 123
CARHARACIKLAMA = 'DENEME'
CARHARTUTAR = 998
 
SQLExec( m.nHandle, m.lcSQL)

9 Son düzenleyen, cetinbasoz (30.03.2012 17:16:25)

Re: Sql Komut Hatası

soykanozcelik yazdı:

parametrik kısımlarıda tipine gore text..endext arasinda <<m.lnp1>> '<<m.lcp2>>' gibi kullanabilirsin bu sayede dis tarafa birsey almak zorunda kalmazsiniz.

Soykan elinin surctugunu farzediyorum. Bunlar "parametrik" yazim degil textmerge. Text...endtext arasinda ?m.lnp1, ?m.lcp2 gibi kullanabilirsin demek istedin sanirim. "Tipine gore" diye birsey de yok:) Parametrenin guzelligi orada. Surucu cevirir gerektigi gibi.

10

Re: Sql Komut Hatası

Baslamisken biriki not daha (ukalalik gibi oluyor:( ama bazen de hayat kurtarabilir):

-Stringlerde [ ] gerekmedikce kullanmayin (Gerci ayni sey text...endtext'de de oluyor, uyanik olun). Neden derseniz, #define degerlereriniz varsa bunlar [ ], text .. endtext kullanildiginda degerlediriliyor. Tek ve cift tirnakda degerlendirilimiyor. Ornek:

Visual Fox Pro
#define guzel cirkin

 
? 'VFP cok guzel bir dil'
? "VFP cok guzel bir dil"
? [VFP cok guzel bir dil]
Text to lcText noshow
VFP cok guzel bir dil
EndText
? m.lcText

Bunu bilerek yapiyorsaniz o zaman tamam. Dikkatli olun.

-Stringlerde 255 karakter siniri tirnak arasinda olan kisimlar icin gecerli. N tane 'tirnak icinde' olan kisimi birlestirip cok uzun (16 Mb dokumente edilen) string olabilir:

Visual Fox Pro
lcSQL = "select ..." +;

     " ... " +;
     " ..."

gibi. Her "..." bolum 255 karaktere kadar olabilir.

11

Re: Sql Komut Hatası

Yukarıdaki konularla ilgili problemimiz kalmadı. Aynı proje  devamında ağ ortamından da programı kullanıma açmak istiyorum. Ancak Sql veri tabanına ağdan bağlanamıyorum. Ağdaki bilgisayarların anamakinedeki sql servere bağlanması için nasıl işlem yapmalıyım?

12

Re: Sql Komut Hatası

Diger ağdaki bilgisayarlarinda ana makinadaki sql servera baglanabilmesi icin SQL Server Native Client yuklemeleri gerekiyor

SQL Server 2008 Native Client x86 http://go.microsoft.com/fwlink/?LinkId= … lcid=0x409
SQL Server 2008 Native Client x64 http://go.microsoft.com/fwlink/?LinkId= … lcid=0x409

13

Re: Sql Komut Hatası

Tamam. Teşekkürler

14

Re: Sql Komut Hatası

Client driverlarin olmasi yeterli degil. Server tarafinda ayarlamalar yapman da gerekiyor.  www.youtube.com adresine git. Yukaridaki arama yerine 'AccuSQL' yaz. 1 of 4 ... gibi 4 video goreceksin. 3 ve 4. videolar diger bilgisayarlardan baglanmayla ilgili.

15

Re: Sql Komut Hatası

lodo = CreateObject("CursorAdapter")
lodo.DataSourceType="ODBC"
lodo.DataSource=SQLStringConnect("DRIVER=SQL Server;Network=DBMSSOCN;SERVER=w2kas;database=(local);uid=sa;pwd=")
lodo.SelectCmd="select * from foo"
lodo.CursorFill()
Browse


Örneğini uygulayarak client driver yüklemeden diğer bilgisayarlardan bağlanabiliyorum.
Sizce bu normal mi?

16

Re: Sql Komut Hatası

Bana hic dogru gelmiyor, hatta o SQLStringConnect cumlesiyle lokalde baglanmasi bile dogru gelmiyor. Dogru yere baglandigindan emin misin.

Not: ODBC baglandiginda dikkat et yeni data tiplerini VFP bu driver ile tanimiyor (orada SQL 2000 driveri kullanilmism yeni tiplerden o da habersiz).