2011-12-16 77 views
7

Float değerlerini String'e dönüştürmek için ADO'da CAST özelliğini nasıl kullanırım? ADO SQL type cast Float to String (Excel)

Ben
SELECT CAST([Field] AS STRING) FROM ... 

SELECT CAST([Field] AS VARCHAR(20)) FROM ... 

ve

çalıştı ve her zaman bir OLE İstisna (Bilinmeyen hata) olsun.

Tablo sütununda karışık sayısal (sağa yaslanmış) ve alfasayısal (sol yaslanmış) değerler bulunur. Yalnızca alfasayısal değerler varsa, ADO sorgu alanı türü Dize'dir. Ben 2010.

cevap

2

Belki CStr kullanarak çalışacak Delphi 2009 ADO ve Excel kullanıyorum

, yani

SELECT CStr([Field]) FROM... 
+0

deneyin. Şimdi başka bir hata veriyor: Alan "Alan" bulunamadı. Sanırım CSTR işlevi sütun adını değiştirir ve. Bu nedenle, bir takma ad alanı gereklidir: CStr ([Field]) alanını [Field] olarak SELECT. Google for help :) – mjn

+0

Alçıdan sonra bile sonuç kümesini açarken hala bir hata var - "E_FAIL". Başka bilgi verilmez. Veri değişim formatı olarak Excel'i çok seviyorum: P – mjn

+0

Belki de alan zaten bir dize ise CSTR başarısız olur mu? Sadece SELECT iif (fieldType ([field]) <> string, CStr ([field]), [field]) FROM 'gibi bir alandaki dize türü değerine sahip olmayan satırları yayınlamaya çalışın. Kafamın üst kısmındaki doğru sözdizimini bilmiyorum ama siz bu fikri elde edersiniz ... – ain

4

CAST SQL Sunucu ifadesidir. Delphi SELECT Field FROM...

kullanın: ADOQuery.FieldByName('Field').AsString

SQL deyimi yoluyla yayınlamak olamaz.

karışık veri türleri kullanarak: this from MSDN

Oku (karışık veri türleri hakkında bir Dikkat):

ADO must guess at the data type for each column in your Excel worksheet or range. (This is not affected by Excel cell formatting settings.) A serious problem can arise if you have numeric values mixed with text values in the same column. Both the Jet and the ODBC Provider return the data of the majority type, but return NULL (empty) values for the minority data type. If the two types are equally mixed in the column, the provider chooses numeric over text.

Eğer genişletilmiş özellikler bölümünde IMEX=1 eklemeniz gerekir bağlantı dizesi. kalıcı alan TWideStringField olacaktır.

bağlantı dizesi şu şekilde görünmelidir:

Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=C:\MyFile.xls;Mode=Share Deny None;Extended Properties="Excel 8.0;IMEX=1";...

+0

Delphi uygulaması kalıcı Alanlar kullanır, bu nedenle sonuç kümesi açıldığında hata oluşur - Bu, Open (Açık) zaten – mjn

+0

başarısız olduğu için kullanamazsınız çünkü basit bir seçim kullansanız bile başarısız olur? Yani: "$ sheet1'den * seçin" (döküm olmadan)?ve "kalıcı alanlar" ile ne demek istiyorsun? – kobik

+0

"Kalıcı alanlar", her bir tablo sütunu için tür, boyut, kesinlik, başlık vb. Gibi özellikleri saklayan bileşenler gibidir. Basit bir seçim * çalışacaktır. Ancak, özel gereksinimler varsa, bu alan bileşenleri vardır ve gerçek veri türü ile eşleşmeyen bir türü varsa, Delphi ADO bileşeni bir istisna şikayet eder ve çoğaltır. – mjn

1

CSTR geçerli bir dönüşüm fonksiyonu gibi görünüyor

SELECT IIF([Field] IS NULL, NULL, CSTR([Field])) AS [Field] 
    FROM ...