2016-04-05 21 views
1

Açıklayıcı raporlar oluşturmak için farklı yerlerde farklı alanların verilerini içeren uzun bir karmaşık dizeler listesi oluşturmam gerekiyor. Access 2010'da tasarladığım tek yol, metin bölümlerini bir tabloya, gösterilecek dizeyi oluşturmak için kullanılacak alan adlarıyla birlikte kaydetmek (Şekilde satır1 ifadesine bakın). Kısaca:Access Query'de başka bir alanda yer alan bir alan adı nasıl değerlendirilir?

//field A contain a string with a field name: 
A = "[Quantity]" 
//query expression: 
=EVAL(A) 
//return error instead the number contained in field [Quantity], present in the query dataset 

ben saha A'da bulunan Ancak çalışmıyor görünüyor adı alanında (B) değeri elde etmek, bir alanın (A) üzerine bir EVAL yapıyor sandım. Herhangi bir yol var mı?

Örnek (çok basitleştirilmiş): Sample query that EVAL a field containing other field names to obtain the value of the fields

herhangi bir fikir? PS: Benim ingilizce için özür dilerim, benim anadilim değil.

cevap

1

Başka bir forumda ilginç bir geçici çözüm buldum. Diğer insanlar EVAL kullanarak aynı problemi yaşadılar, ancak REPLACE işlevini kullanarak bir alanın bulunduğu bir dizenin yerini alabildiğini buldular.

REPLACE("The value of field Quantity is {Quantity}";"{Quantity}";[Quantity]) 
({} bir kelime dizede karşılaştırın yoktur ikame edilmesi bilirse sadece açıklık için gerekli değildir kullanılır)

.

REPLACE(REPLACE("<Salutation> <Name>";"<Salutation>";[Salutation]);"<Name>";[Name]) 

bir dizesinde alanları adını gömmek ve bu alanın şimdiki değeri ile onların yerine mümkündür: Bir sorguda bu kodu kullanarak,, istedikleri kadar da çok sayıda farklı alan bir DEĞİŞTİRİN iç içe kullanmak istiyorum sorgu. Tabi ki bu son örnek, daha basit bir şekilde bir birleştirme (&) ile yapılabilir, ancak dize bir sabit alanda kodlanmışsa, gerektiğinde kayıtlara bağlanabilir. olarak

REPLACE(REPLACE([DescriptiveString];"[Salutation]";[Salutation]);"[Name]";[Name]) 

Ayrıca, karmaşık dizeleri oluşturmak için kesin çözüm sağlar bağlam temelli: Zor kısmı bir benzeri (dizede yerleştirmek isteyen tüm alanın tutucuları ortaya çıkarmaktır

REPLACE(REPLACE(REPLACE("{Salutation} {Name} {MaidenName}";"{Salutation}";[Salutation]);"{Name}";[Name]);"{MaidenName}";IIF(Isnull([MaidenName]);"";[MaidenName])) 

{Miktar} DEĞİŞTİRME çağrısında, {Salutation}, {Name}, {MaidenName}), EVAL ile sadece bu çalışıyorsa bu sıkıcı kısımdan kaçınacaktır.

İstediğim kadar düzgün değil, ama çalışıyor.