excel den sql server 2000 atarken hata field inckeyno cannot
excel den sql server 2000 atarken hata field inckeyno cannot
selamünaleyküm...............
Excel den aynı sütün büyüklüğündeki tabloyu aynı sütün büyüklüğünde sql server 2000 deki table parse edicem...hersey tamam fakat....query analyzer da set identity on yazdığım halde yine parse etmiyor veriyi...Ne yapmam gerekli...
Excel den aynı sütün büyüklüğündeki tabloyu aynı sütün büyüklüğünde sql server 2000 deki table parse edicem...hersey tamam fakat....query analyzer da set identity on yazdığım halde yine parse etmiyor veriyi...Ne yapmam gerekli...
A.S.
Şimdi hata mesajını tam olarak yazarsanız ve excel'deki fieldları veya tabloyu, aynı zamanda MS-SQL Server'daki tablo yapısını ve tam olarak yapmak istediğinizi biraz daha detaylı yazarsanız yardımcı olabiliriz.
Kolay Gelsin.
Şimdi hata mesajını tam olarak yazarsanız ve excel'deki fieldları veya tabloyu, aynı zamanda MS-SQL Server'daki tablo yapısını ve tam olarak yapmak istediğinizi biraz daha detaylı yazarsanız yardımcı olabiliriz.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sql server 2000 database bilgileri ve codelar
bu sql deki tablo
bu da codelar
bu da sql deki tabloların özellikleri bir kaçının
STOK VARCHAR 35
FIS NO VARCHAR 15
DEPO KODU SMALLINT
STHAR_ACIKLAMA VARCHAR 35
STHAR_FTIRSIP CHAR 1
STHAR_CARIKOD VARCHAR 15
toplam 83 field var bir de bana sorun çıkaran inckeyno diye otomatik oluşan bir primary key ve toplam 83 adet field dan oluşuyor sql server 2000 deki tablo.........
Şimdi exceldeki veriyi benim yaptığım şekilde çekip ki bu olaydan huso abimizden bilgi aldım baya bir yardımcı oldu bana bu excel konusunda birebir sql deki fieldlarla excel deki field lar ama ben sadece 6 veya 7 fielda bilgi girişi yapıcam....Bunu yapabilirmiyim yani exceldeki girdiğim 6 fieldlık veriyi delphiye çekip bu tabloları select yapıp nasıl sql server daki table gerekli alanlarına yazabilirim.....
Şimdiden teşekkürler
Kod: Tümünü seç
STOK_KODU FISNO STHAR_GCMIK STHAR_GCMIK2 CEVRIM STHAR_GCKOD STHAR_TARIH STHAR_NF STHAR_BF STHAR_IAF STHAR_KDV DEPO_KODU STHAR_ACIKLAMA STHAR_SATISK STHAR_MALFISK STHAR_FTIRSIP STHAR_SATISK2 LISTE_FIAT STHAR_HTUR STHAR_DOVTIP PROMASYON_KODU STHAR_DOVFIAT STHAR_ODEGUN STRA_SATISK3 STRA_SATISK4 STRA_SATISK5 STRA_SATISK6 STHAR_BGTIP STHAR_KOD1 STHAR_KOD2 STHAR_SIPNUM STHAR_CARIKOD STHAR_SIP_TURU PLASIYER_KODU EKALAN_NEDEN EKALAN EKALAN1 REDMIK REDNEDEN SIRA STRA_SIPKONT AMBAR_KABULNO FIRMA_DOVTIP FIRMA_DOVTUT FIRMA_DOVMAL UPDATE_KODU IRSALIYE_NO IRSALIYE_TARIH KOSULKODU ECZA_FAT_TIP
A09-0522 000000000000001 250 0 0 C 08.03.2004 0 0 0 0 500 10029 0 0 6 0 0 H 0 0 0 0 0 0 0 0 I 10029 0 0 1 1 0 250 0 08.03.2004 0
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB, DB, Grids, DBGrids, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
ADOTable1: TADOTable;
ADOTable1STOK_KODU: TStringField;
ADOTable1FISNO: TStringField;
ADOTable1STHAR_GCMIK: TBCDField;
ADOTable1DEPO_KODU: TSmallintField;
ADOTable1STHAR_ACIKLAMA: TStringField;
ADOTable1STHAR_FTIRSIP: TStringField;
ADOTable1STHAR_CARIKOD: TStringField;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Label1: TLabel;
Label2: TLabel;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
book:variant;
excel,sheet:variant;
satir, sutun:integer;
str:string;
implementation
uses ComObj;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
excel := createOleObject('Excel.application');
OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls';
if opendialog1.Execute then
begin
book:= Excel.WorkBooks.Open(OpenDialog1.FileName);
try
Screen.Cursor := crHourGlass;
sheet := book.worksheets[1];
for satir:=1 to 2500 do
begin
str := sheet.cells[satir, 1];
if (str <> '') then
begin
Update;
ADOTable1.Append;
for sutun:=1 to 83 do
if sutun = 3 Then
adoTable1.Fields[sutun-1].AsInteger := StrToInt(sheet.cells[satir, sutun])
else
adoTable1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
adoTable1.Post;
end;
end;
Excel.quit;
excel:=Unassigned;
finally
Screen.Cursor := crDefault;
end;
end;
End;
procedure TForm1.FormShow(Sender: TObject);
begin
adoTable1.Open;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
adoTable1.Close;
end;
end.
STOK VARCHAR 35
FIS NO VARCHAR 15
DEPO KODU SMALLINT
STHAR_ACIKLAMA VARCHAR 35
STHAR_FTIRSIP CHAR 1
STHAR_CARIKOD VARCHAR 15
toplam 83 field var bir de bana sorun çıkaran inckeyno diye otomatik oluşan bir primary key ve toplam 83 adet field dan oluşuyor sql server 2000 deki tablo.........
Şimdi exceldeki veriyi benim yaptığım şekilde çekip ki bu olaydan huso abimizden bilgi aldım baya bir yardımcı oldu bana bu excel konusunda birebir sql deki fieldlarla excel deki field lar ama ben sadece 6 veya 7 fielda bilgi girişi yapıcam....Bunu yapabilirmiyim yani exceldeki girdiğim 6 fieldlık veriyi delphiye çekip bu tabloları select yapıp nasıl sql server daki table gerekli alanlarına yazabilirim.....
Şimdiden teşekkürler
selamünaleyküm
yazmayı unuttuğum olay birebir 83 to 83 gibi bir olay yapıyor bizim yaptığmız ama ben 6 fieldtaki exceldeki tüm veriyi alıp direk 6 fielda sql deki tabloya insert etmem gerekiyor...83 to 83 yaptığım için işin içine primary key de giriyor ona yazamadığım içinde hata alıyorum....ama bu yaptığmız olayda illa database deki field kadar exceldede field oluşturmam gerekiyor...ama dediğim gibi ben sadece excel de 6 field oluşturup ona değerleri girip elle örneğin 50 satırlık bir veri onu direk sql server 200 deki tabloya insert etmem gerekiyor...yardımcı olursanız sevinirim.......
Tekrar Selamlar,
MS-SQL Server'da tanımlı Primary Key boş ise oraya değer koymanız gerekir, eğer Primary Key aynı zamanda bir Identity Field ise oraya değer koymamanız gerekir zira MS-SQL Server oraya kendi değer atacaktır.
Bunun dışında fieldlarınızdan herhangi birinde (excel'de sizin işinize yaramayan bir field) NOT NULL Tanımlı olabilir buna da dikkat etmeniz gerekir.
83 Field'ı doldurmak yerine, Bir Insert Cümleciği oluşturabilirsiniz (İçerisinde sadece size gerekli fieldların olduğu) ve bu Insert cümlesini Execute ettirerek kayıt yapabilirsiniz.
Ayrıca SQL'deki Field type'lar belirsiz. Burada veri uyuşmazlığı ile de karşılaşabilirsiniz.
Bun noktalara dikkat edin.
Kolay Gelsin.
MS-SQL Server'da tanımlı Primary Key boş ise oraya değer koymanız gerekir, eğer Primary Key aynı zamanda bir Identity Field ise oraya değer koymamanız gerekir zira MS-SQL Server oraya kendi değer atacaktır.
Bunun dışında fieldlarınızdan herhangi birinde (excel'de sizin işinize yaramayan bir field) NOT NULL Tanımlı olabilir buna da dikkat etmeniz gerekir.
83 Field'ı doldurmak yerine, Bir Insert Cümleciği oluşturabilirsiniz (İçerisinde sadece size gerekli fieldların olduğu) ve bu Insert cümlesini Execute ettirerek kayıt yapabilirsiniz.
Ayrıca SQL'deki Field type'lar belirsiz. Burada veri uyuşmazlığı ile de karşılaşabilirsiniz.
Bun noktalara dikkat edin.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
selamünaleyküm
peki excel dbgrid aldığım verileri nasıl fieldları nasıl select edip sql serverdeki database yazabiliim....biraz bilgi verirmisiniz bu konuda çok fazla iyi değilim....
buna benzer bir sey yapılabilir mi bu da hata veriyor
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, Buttons;
type
TForm1 = class(TForm)
SpeedButton1: TSpeedButton;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Label1: TLabel;
DBGrid2: TDBGrid;
Edit1: TEdit;
Button2: TButton;
ADOTable1: TADOTable;
ADOConnection2: TADOConnection;
DataSource2: TDataSource;
ADOQuery2: TADOQuery;
ADOQuery2STOK_KODU: TStringField;
ADOQuery2FISNO: TStringField;
ADOQuery2STHAR_GCMIK: TBCDField;
ADOQuery2STHAR_GCKOD: TStringField;
ADOQuery2DEPO_KODU: TSmallintField;
ADOQuery2STHAR_ACIKLAMA: TStringField;
ADOQuery2STHAR_FTIRSIP: TStringField;
ADOQuery2STHAR_HTUR: TStringField;
ADOQuery2STHAR_DOVTIP: TWordField;
ADOQuery2STHAR_BGTIP: TStringField;
ADOQuery2STHAR_CARIKOD: TStringField;
ADOQuery2SIRA: TSmallintField;
ADOQuery2STRA_SIPKONT: TSmallintField;
ADOQuery2STHAR_TESTAR: TDateTimeField;
ADOQuery2VADE_TARIHI: TDateTimeField;
ADOQuery2SUBE_KODU: TSmallintField;
ADOQuery2EXPORTTYPE: TWordField;
ADOQuery2ONAYTIPI: TStringField;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ExcelDosya : String;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ExcelDosya := 'c:\excelimport\Kitap1.xls';
DataSource1.DataSet := AdoQuery1;
DBGrid1.DataSource := DataSource1;
AdoConnection1.LoginPrompt := False;
AdoConnection1.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ ExcelDosya + ';Extended properties=Excel 8.0';
AdoQuery1.Connection := AdoConnection1;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add( 'Select * from [Sayfa1$]');
AdoQuery1.Active := True;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
AdoConnection2.LoginPrompt := False;
AdoQuery2.Connection := AdoConnection1;
AdoQuery2.SQL.Clear;
AdoQuery2.SQL.Add( 'Select STOK_KODU, FISNO, STHAR_GCMIK, STHAR_GCKOD, DEPO_KODU, STHAR_ACIKLAMA, STHAR_FTIRSIP, STHAR_HTUR, STHAR_DOVTIP, STHAR_BGTIP, STHAR_CARIKOD, SIRA, STRA_SIPKONT, STHAR_TESTAR, VADE_TARIHI, SUBE_KODU, EXPORTTYPE, ONAYTIPI from TBLSIPATRA');
AdoQuery2.Active := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
end.
Selamlar,
Sanırım Admin az önce gönderdiğiniz diğer soruyu silmiş bu sebeple ihtiyacınız olan cevabı buraya yazıyorum,
Diyelim ki Excel'deki tablonuzdaki Hücreler aşağıdaki gibi olsun
H1 (String İsim İçin Kullanılsın),
H2 (String Sınav Kodu için Kullanılsın),
H3 (Numeric(10,2) Not için Kullanılsın)
Ve SQL Table'ınızdaki field'lar da aşağıdaki gibi olsun
SNV_ID (Integer, Identity, Primary Key, NotNull),
SNV_OGR_ADI (String(30))
SNV_SINAV_NO (String(10))
SNV_NOT (Numeric(10,2))
Şimdi nasıl Insert Ederim?
Bir SQL String Hazırtlarsınız ve değerleri buraya Paremetre olarak atarsınız
Yani
Yukarıdaki kodda dikkat ettiyseniz Primary Key Identity alan INSERT Cümlesinde Geçmiyor. Zaten ihtiyaç da yok zira MS-SQL Server kendisi türeteceği için bunu insert cümlesinde göndermeye gerek yok.
Yukarıdaki kod Manuel olarak Bir Insert Cümlesinin Execute edilmesini göstermekte. Siz ona bakarak kendi cümlenizi hazırlamalısınız.
Kolay Gelsin.
Sanırım Admin az önce gönderdiğiniz diğer soruyu silmiş bu sebeple ihtiyacınız olan cevabı buraya yazıyorum,
Diyelim ki Excel'deki tablonuzdaki Hücreler aşağıdaki gibi olsun
H1 (String İsim İçin Kullanılsın),
H2 (String Sınav Kodu için Kullanılsın),
H3 (Numeric(10,2) Not için Kullanılsın)
Ve SQL Table'ınızdaki field'lar da aşağıdaki gibi olsun
SNV_ID (Integer, Identity, Primary Key, NotNull),
SNV_OGR_ADI (String(30))
SNV_SINAV_NO (String(10))
SNV_NOT (Numeric(10,2))
Şimdi nasıl Insert Ederim?
Bir SQL String Hazırtlarsınız ve değerleri buraya Paremetre olarak atarsınız
Yani
Kod: Tümünü seç
AdoQuery1.SQL.Text := 'INSERT INTO SNV_TABLE (SNV_OGR_ADI, SNV_SINAV_NO, SNV_NOT)
VALUES (:STR_AD, :STR_SINAV, :FLT_NOT)' ;
ADOQuery1.Parameters.ParamByName('STR_AD').Value := (Excel'deki Hücre1 Değeri) ;
ADOQuery1.Parameters.ParamByName('STR_SINAV').Value := (Excel'deki Hücre2 Değeri) ;
ADOQuery1.Parameters.ParamByName('FLT_NOT').Value := (Excel'deki Hücre3 Değeri) ;
ADOQuery1.ExecSQL ;
Yukarıdaki kodda dikkat ettiyseniz Primary Key Identity alan INSERT Cümlesinde Geçmiyor. Zaten ihtiyaç da yok zira MS-SQL Server kendisi türeteceği için bunu insert cümlesinde göndermeye gerek yok.
Yukarıdaki kod Manuel olarak Bir Insert Cümlesinin Execute edilmesini göstermekte. Siz ona bakarak kendi cümlenizi hazırlamalısınız.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
ayrıca eklemek istiyorum
Senin yazdığın kodu ta en baştan istemiştim bunun normal := şeklinde yapılacak bir şekli yopmu eşitlik manasında husonete sormuştum ama bana direk ado ile bir örnek var demişti vs...bunu bekliyordum...ve gönderdin kardeş teşekkür ederim...
peki excel hücre değerini nasıl tanımlayacam
yaa kusura bakma hakkaten ben bu excelle hiç uğraşmadım...Normalde excel deki sheeti buraya çektim ama hücre değerlerini nasıl görecek...bu yani anlamadım bu hücre değeri olayını...
yani sunu demek istedim
biz exceldeki verileri normal code larını gönderdiğim metotla aldığımız zaman hücre hücre yazabilecekmiyim...? anlayamadım orasını...veya öle değilse nasıl alıcam....
selamünaleyküm...
daha yazdığınız excel hücrelerini söle yapın dediğiniz onları yazmadan bir calistiriyorum söle bir hata veriyor
string literals may have at most 255 elements......diye hata veriyor...255 karakteri geçemeyeceksek mümkün değil ki ben 254 olsun ancak öle olabilir ....peki nasıl yapacaz lüften çözüm........
string literals may have at most 255 elements......diye hata veriyor...255 karakteri geçemeyeceksek mümkün değil ki ben 254 olsun ancak öle olabilir ....peki nasıl yapacaz lüften çözüm........
Selamlar,
Yaw o kadar karışık anlatıyorsunuz ki yazdıklarınızı anlamakta güçlük çekiyorum
Ama anladığım kadarı ile yapmanız gereken şu,
gibi bir kod yazmanız gerekiyor. Tabi STR_KOD dediğim yerde sizin asıl INSERT cümlesindeki (:) ile başlayan parametreleriniz olacak.
Yani döngü içerisinde veremeyeceksiniz bunun yerine biraz daha sabit bir kod ile her excel satırı için (sütünlarını bilerek) parametrelere Assign etmeniz gerekecek.
Zannedersem sorduğunuz bu ama değilse bilemem
Kolay Gelsin.
Yaw o kadar karışık anlatıyorsunuz ki yazdıklarınızı anlamakta güçlük çekiyorum
Ama anladığım kadarı ile yapmanız gereken şu,
Kod: Tümünü seç
AdoQuery1.Params.ParamByName('STR_KOD').Value := Sheet.Cells[satir, sutun];
Yani döngü içerisinde veremeyeceksiniz bunun yerine biraz daha sabit bir kod ile her excel satırı için (sütünlarını bilerek) parametrelere Assign etmeniz gerekecek.
Zannedersem sorduğunuz bu ama değilse bilemem
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
tekrar selamlar
o olayı hallettim kayıt olayını ama yine kayddemiyorum tipler uyuşmuyor....her türlü tipi denedim olmuyor neden acaba........uyum da şu........
Database deki field Sql Server daki yani Decimal 16 değeri var excelden aldığım veriyi bir türlü buna göre değiştiremedim..olmadı...
Database deki field Sql Server daki yani Decimal 16 değeri var excelden aldığım veriyi bir türlü buna göre değiştiremedim..olmadı...