text:
Have you ever purchased from PartSelect.com before?
Thank you for helping make our site better.
Enter your model number or a part number and click "Search"
Need help finding your model number?
Got a broken KitchenAid dryer? PartSelect.com can help. To find the KitchenAid part you need, try searching with your dryer model number. We offer same day shipping on all in-stock parts and free installation videos to help you complete your KitchenAid dryer repair.
Dryer was working, but no heat.
First I unplugged the dryer, then removed the back panel, this exposed most all of the wiring and I could see the heater coils.Not knowing what the problem was I started looking at the coils and...read more
Dryer tub belt broke
Removed the two screws that attatch the lent channel to the top of the dryer, then lifted the top of the dryer by pushing in on the two locking tabs located at the front , left and right , corners of ...read more
Door Catch part had fallen out,/ was missing
Received your parts, Popped them both right into place, Even though only one side needed to be replaced, I wanted them to match up. It was amazing how easy this was. My husband was quite impressed I h...read more
Gas Dryer would not ignite
1. Removed lint screen and holder frame. Unplugged the electrical cord and closed the gas valve in the line before it goes into the dryer.2. Removed two bolts at bottom front of machine and took...read more
Dryer blew cold air.
PartSelect is great for providing parts as requested. Unfortunately, neither of the 2 parts I ordered were on my machine. My bad for not looking at the actual part instead of the description. A word t...read more
noisy and slow drum speed
1. disconnect power,gas and vent lines2. pop off top of unit3. remove front of dryer4. lay unit on its back5. remove drum and replace pulley assembly,belt,drum rollers of whic...read more
One of the drum support rollers was worn out
I lifted the top of the dryer and removed the front panel. I removed the drum exposing the drum rollers. I replaced the rollers and reassembled the dryer. The exploded views on the web site made it ea...read more
interior drawers were off their rollers
pulled the washer out and replaces the top roller system on both sides and the replaced the weels and brackets on the bottom drwaer. however i had trouble putting the dish washer back correctly and ha...read more
door switch was bad
i was able to go on line with your company , find my dryer, order the part and had it the next day. fast , great , service...read more
Below are the most popular KitchenAid Dryer models we have.
Enter your model number in the search box to find your model.
All brand logos are trademarks of their respective owners.
The PartSelect logo is a Registered Trademark of Atlantic Laundry Centres, Ltd.
Copyright © 1999-2016 , Eldis Group Partnership. All rights reserved.


text:
Skip to Content
Your Health. Our Mission.
Call us today. 864-560-6000
Home > Care & Treatment > Heart > Heart: Areas Of Excellence
View Additional Section Content
From open heart surgery to emergency care, preventive care and rehabilitation, we offer innovative levels of care and a commitment to quality. Among our many "firsts" are: performing the first "beating heart" surgery in the state, developing the first nationally accredited Chest Pain Center in the state, offering a new brain-saving therapy for people having a heart attack, creating a heart failure center and heart rehabilitation facilities, and much more.
The programs, services and facilities below are examples of our abilities and commitment to bringing the best in heart care to the communities we serve.
Thank you for your feedback!
More Events >>
View all Services
© 2016 Spartanburg Regional Healthcare System. All Rights Reserved.

subset: commoncrawl


text:
Real Estate in Simi Valley, CA
Simi Valley is located in California. Simi Valley, California has a population of 71,505. Simi Valley is more family-centric than the surrounding county with 38.63% of the households containing married families with children. The county average for households married with children is 37.62%.
The median household income in Simi Valley, California is $91,215. The median household income for the surrounding county is $87,894 compared to the national median of $53,046. The median age of people living in Simi Valley is 37.5 years.
Simi Valley Environment
The average high temperature in July is 93 degrees, with an average low temperature in January of 43.2 degrees. The average rainfall is approximately 16.2 inches per year, with 0.1 inches of snow per year.
Simi Valley Map
Simi Valley Real Estate offices
Sort by:
Real Living Pacific Realty
Real Estate near Simi Valley
Nearby Cities
Simi Valley Zip Codes
Nearby Cities Homes for Sale


text:
5 thoughts on "coming events"
am snuggled up in bed w my reading glasses and Seven Moves. I'm late to your work but devoured Aquamarine and Lucky In The Corner. brought them down to my daughter at IU. thank you for such good stuff. and for being the kind of author I can share w my daughter!
I recently retired and decided to visit the library for authors I have enjoyed. My sister gave me Aquamarine MANY years ago so I wrote down your name and found Carry the One, which I am really liking. I particularly like it when the origin of the title comes out in the book. I'll definitely read all your work. Thank you!
PS: Also love it when one can interface with an author online or at signings. I have read all Ann Patchett's books and have never been able to tell her how much I appreciated her description of Johnny Carson's smile.
On page 196 of The Magician's Assistant: Carson was at his desk, smiling his closed-mouth smile that was slightly embarrassed and completely knowing.
I particularly appreciated this because my dad had that same "pre-laughter" expression, when he knew something was about to go down and was trying not to show it. He looked a little like J.C. as well.
I finished Carry the One and I liked how Alice ended up with the good relationship and seemed to be destined to be happy with it. I really wish that would happen to me. Both parts.
Can you say something about how this concept of the title came to you? Would the one be symbolic of the girl? And who are your favorite authors? I know, I give you one morsel of information and ask for a couple essays in return.


text:
I dated a very attractive guy once named Thomas nn Tate ... I really like that, as I'm not a fan of Tom/Tommy.
Mama to the Kindergamer (5/2002) and the Montessaur (7/2010)
... and introducing Baby Gretel! Margaret Meriwether, born 4/4/2013 at 37+1!
I like the name, but I feel like that might be a little awkward, depending on your family. Personally, I'm trying to avoid reusing any first names from either of our families for our baby. Except for middle names - which will be family names.
ODS (3), YDS (born Sept 2015)
Favorite boy's name! Absolutely love it! But as Mia said, I hate Tom/Tommy, and Tommy rhymes with our last name, sounds awful. I don't know, we've moved on from it, but it's still my favorite name.
I can't imagine naming my son after my stepbrother (who also lives far away and haven't seen him in years, since my stepmom left my dad), even though Evan is a really nice name. But if it doesn't bother you or your husband, I don't see what's wrong with it!
Ayme (27) & Ben (31) Married 7/19/08 / Ian born 3/19/13 after 2 years TTC and 37 weeks 5 days of pregnancy
Love Thomas
It's my dad's FN and my son's MN.
Sagittarius Mommy to:
My Gemini Monkey (6-20-09)
My Scorpio Budder (11-11-11)
and my furbaby Bugga (3-10-07)
I think Thomas is great! I even like Tom a lot, but I have a good association.
Could you use Thomas Johan if you don't want Johan as a first name? I think it would be nice to include it.
If we ever have another boy we are using Thomas as the mn after my DH's uncle.
( ))____Eva____))> and ( ))__Harrison__))>
"It's a rather rude gesture, but at least it's clear what you mean." - Katharine Hepburn


text:
Editor's Note: ESPN Insider has teamed with Blue Ribbon College Football Yearbook to provide a comprehensive look at all 120 FBS teams. To order the complete 2010 edition of Blue Ribbon College Football Yearbook, visit www.blueribbonyearbookonline.com or call 1-877-807-4857 Monday through Friday from 9 a.m. to 5 p.m. Eastern.
Thunder lose poise down the stretch, drop Game 6
7hRoyce Young
Baylor loses 2 more commits amid Briles fallout
7hJeremy Crabtree
Yu Darvish shows sizzling stuff in return to action
8hJean-Jacques Taylor
LeBron James ready to step in Bill Russell's footprints
1dBrian Windhorst
Atlas: If I trained McGregor to face Mayweather
1dTeddy Atlas
McGee: 'The Greatest Spectacle in Racing' indeed
2dRyan McGee
Five players to watch in the League of Legends 2016 summer split
14hAdel Chouadria
Smith at peace with infamous Stanley Cup own goal
21hBen Arledge
Resetting the market: Clayton's top 15 NFL free agents
2dJohn Clayton
Blue Ribbon Preview: Miami
- comment


text:
New Asbury Farm
LOCAL LAMBfrom the meadows of Loudoun County, Virginia NEW ASBURY FARM
41469 Springvalley LaneLeesburg, VA 20175 email@example.com Spring Lamb!
Call or Email today It's Grilling Time! Best Lamb Burgers ever—just
mix with Salt and Fresh Fennel Marinate Chops in Olive Oil, Garlic, S & P, and Rosemary
Sausage Links on Low Heat for 20 Minutes * Farm Fresh
Eggs * As always we offer special
savings on stock-up freezer packageswith your choice of cuts:25-30
lb Half Lamb @ $12/lb50-60 lb Whole Lamb @ $11/lb "I just wanted to let you
know how delicious your lamb is. We have never tasted any lamb with such flavor and texture before. You
are really producing a superlative product!" D.R., Lovettsville, VA 7/9/12 ***"I've got to say, we've tried half a dozen other lamb producers, and none come close.
Your meat simply tastes the best." T.E., Washington, DC 11/8/12 ***"Bill and Joan consistently deliver the highest quality lamb that I have tasted.
My dinner guests particularly rave about the lamb burgers and the legs of lamb - both bone-in and boneless. The meat is rich,
tender and melts in the mouth. The flavor is also delicate and subtle. Highly recommended." P.B.,
Washington, DC 8/11/09 We are a small family farm located on 12 rolling acres south of Leesburg, Virginia, convenient to Ashburn
and Brambleton, off Evergreen Mills Rd._ _ _ _ _Our goal is to produce
healthy, tender and flavorful local lamb for our customers, while raising our sheep in the most natural environment possible.
Our sheep graze freely on the lush green pastures, enjoying the fresh country air and natural well water. We currently
have one ram and 20 breeding ewes on the farm. Our breed can lamb in any season, so we lamb one group in the fall
and another group in the spring._ _ _ _ _Our production method
is called "intensive grazing management." This means that we subdivide our fenced pastures into 2 to 6 grazing
areas using temporary fencing. We allow our groups to "eat half, leave half." This frequent relocating
of our flock allows the pastures to recover quickly from grazing, prevents erosion from overgrazing, and promotes a healthier
flock._ _ _ _ _Their diet consists mainly of grass in the pastures,
essential minerals, hay in winter and before turning out onto new lush pasture, and a small amount of whole corn and
barley. Our White Dorper breed is naturally fast growing and heavily muscled, so we do not feed growth
hormones. The sheep are out in the fresh air, not confined in an enclosed space, so we do not need to feed antibiotics._ _ _ _ _10,000 miles fresher!
41469 Springvalley Lane
Leesburg, VA 20175
Spring Lamb!
Call or Email today
It's Grilling Time!
Best Lamb Burgers ever—just
mix with Salt and Fresh Fennel
Marinate Chops in Olive Oil, Garlic, S & P, and Rosemary
Sausage Links on Low Heat for 20 Minutes
* Farm Fresh
Eggs *
As always we offer special
savings on
stock-up freezer packages
with your choice of cuts:
lb Half Lamb @ $12/lb
50-60 lb Whole Lamb @ $11/lb
We are proud members of the following organizations:Loudoun Valley Sheep Producers AssociationAmerican Dorper Sheep Breeders' Society
We are located near Brambleton, off Evergreen Mills Rd, one half mile north of Ryan Rd, the first
driveway on the right on Springvalley Lane.
Powered by Register.com


text: Cambridge Conservatives today slammed Lib Dem MP Julian Huppert for being 'out of touch' with Cambridge's motorists after he criticized the Government for having spent £37 million on researching the much-needed upgrade of the A14. The scheme was cancelled in October 2010 after a long campaign of opposition by local Lib Dems including Mr Huppert. Continue reading


text:
Respond to Review of De Oude Plek
by yvo
Review: "De Oude Plek" is truly a legedary place in Dutch vegan terms! I've heard about it for years and it sounded like a myth; a vegetarian Chinese restaurant outside of the city-centre of Rotterdam with tons of vegan options. I wanted to go there for ages but I never had the time... untill last weekend! And everything they said about this restaurant is true, even better! It's a small Chinese restaurant like any other Chinese restaurant. The staff friendly welcomes you, brings you to your seat and give you the menu. You open the menu and than it hits you in the face: all these options... where to start? What to choose? Vegan chicken, babi-pangang and squid?!? Holy molar... It took me 20 minutes to decide what I wanted and I really enjoyed my meal. Nasi with sateh and fried vegetables with chicken, squid and sausages. I wasn't a big fan of the squid (it was okay but kinda spungy...) but that's the only tiny con about the meal. And I guess you can pick whatever from the menu, it all seemed really good. The staff is really friendly, they're doing this with passion. Funny (or akward...) to mention: it's next to a helal-butcher with gigantic letters: VLEES EN KIP (meat and chicken).
Login | Register (see member benefits)


text:
Threaded View
28 Dec 2012 3:40 AM #1
LIveSearchGrid not positioning on result
Live search not positioning on results, but instead at the beginning of the grid, although matches are found. It positions correctly on matched result only if just one character is entered in search box. With version 4.0.7 everything works fine.


text:
Unequal treatment of racism and anti-Christian bigotry ongoing
Once again, the spirit of Christmas will be defiled by the godless in their war on Christmas, as they renew their annual assaults on the constitutional guarantees of free religious exercise and speech. They justify their despicable conduct upon a mythical separation of church and state, words not found in the Constitution. An establishment of religion is a church, just as an establishment of dining is a restaurant. The First Amendment does restrain Congress from granting legislative and executive powers to a particular church. The Civil Rights Act criminalizes discrimination based on race, religion or national origin. "Racist" is now frequently used in political character assassination, but anti-Christian bigotry is pervasively promoted throughout our educational system.
Until our voting "ignorantia" recognize the hypocrisy in the unequal treatments of racism and anti-Christian bigotry, there's no end in sight.
Ronald Bouwman, Oklahoma City


text:
I've seen this:
but I don't understand why -- given the rewrite nature of WP URLs and Google's preference for shorter URLs, why this isn't more strongly recommended:
It's shorter. And who cares about the date in the URL when the entry includes the date anyway?
What am I missing here? :)


text:
Just a little feature today using the keywords "Water Drop" within the stock gallery. Ohhhhh there are some lovely ones out there indeed!
Do you have water droplet stock in your gallery? Feel free to share ONE in the comment section!
Perhaps you have USED a water drop stock image in your artwork? We'd love to see that too!
Also while I think of it, can anyone suggest a nice and clean, easy to use skin for feature/thumbnail posts? Not overly sold on this one!
Skin by fantasy-alive


text:
Saturday 12 May 2012, 18:00
6:45pm for 7:15pm
Bar open from 6pm
Featuring acclaimed vocalist Sarah Yeo
£25 per person
See Roger or Jan to reserve your table or email
Table booking form (Word)
Table booking form (PDF)
Imperial Recreation Ground Exmouth Devon EX8 1DG View with Google Maps
This website is part of the Pitchero Rugby Union network. Create your own free Rugby Union club website with Pitchero.
© Pitch Hero Ltd 2008-2016
Pitch Hero Ltd Registered in ENGLAND | WF17 9TB | Company Number - 636 1033


text:
Queen palm trees are hardy tropical plants. They can survive below freezing temperatures and are moderately drought tolerant. The branches of queen palms spread wide and require ample space. With the proper care, queen palm trees can reach 25 to 50 feet in height and propagate many new trees throughout their lifetimes. Properly caring for your queen palm tree will ensure it lives a long, healthy life.
Things You'll Need
- Fertilizer
- Pruning shears
Plant in the right location. Queen palm trees need at least eight hours of sun a day and should be planted in slightly acidic, well-drained soil. Plant trees 20 feet apart to provide enough space for maximum growth.
Water two to three times per week. The summer months usually necessitate a deep watering three times a week while the winter months require only two.
Fertilize. Queen palms are susceptible to stunted or blackened growth from a deficiency of manganese. Use granular food or palm tree spikes three to four times a year to keep your plant healthy.
Spread mulch around the base of the tree. Queen palms benefit from a 4- to 6-inch layer of mulch applied around the base of the tree extending to the edge of the canopy. This keeps the soil moist and prevents an onslaught of weeds.
Prune with care. Remove brown fronds in the fall and be careful not to tear the bark. As the tree grows, you will need to climb a ladder in order to reach the base of the stems.
Tips & Warnings
- Test your soil regularly to ensure a low pH and prevent mineral deficiencies in your palms.
- Puncture wounds in palm trees never heal. Do not nail signs or lights to the trunks of palms.
You May Also Like
How to Plant a Queen Palm
The Queen Palm, or Coco Plumosa, is a tall, elegant and easy palm to grow in your back yard in USDA zones...
How to Turn Yellow Fronds to Green on a Queen Palm Tree
Queen palm trees, or Syagrus romanzoffiana, ... How to Amend Soil for Queen Palm Trees; How to Take Care of Majesty Palm...
How to Trim Queen Palm Trees
Queen palm trees are low maintenance trees that flourish in full sun, warm temperatures and moist soil. Queen palms are moderately salt...


text: A large area of high pressure will build along the East Coast over the next two days giving eastern North Carolina mainly clear skies and light winds. Overnight lows will dip into the 40s with afternoon highs in the lower to middle 70s. The beaches will see slightly cooler readings as highs hit the upper 60s. The high will move off the coast by Saturday allowing clouds and moisture to return to the area. We should see some showers and thunderstorms by Saturday afternoon across much of the area.


text:
The verb hasten means to move at a high speed. If you hasten to your room, no one will know that you came in late.
Hasten comes from the word haste, which means "excessive speed or urgency." The words hurry and hasten are synonyms. Hasten can also mean "to make happen quickly," like when you open a window in the kitchen when you are cooking to hasten the room's cooling down. Hasten also means "to be quick," like when you hasten to tell everyone that the rumor going around about you isn't true.
Definitions of hasten
v move fast
- Synonyms:
- belt along, bucket along, cannonball along, hie, hotfoot, pelt along, race, rush, rush along, speed, step on it
- Types:
- show 5 types...
- hide 5 types...
barge, push forward, thrust ahead
push one's way
buck, charge, shoot, shoot down, tear
move quickly and violently
dart, dash, flash, scoot, scud, shoot
run or move very quickly or hastily
dash violently or with great speed or impetuosity
move precipitously or violently


text:
Server Storage is considered as important aspect in building up your own network infrastructure. You might be ready to invest a high amount the new hardware and ready to upgrade your server in case of low performance. But mostly we neglect is the storage aspect. The data which is not secured properly. We spend a better amount on the bandwidth or on the hardware but what mostly unknown to us is how to manage our storage. Server Storage solution consist of all those branded products which deals with your real data. They are available from small to large network infrastructure. I am here discussion on Storage solution provided by Dell and Hp. They offer a good range product with better technical support which everyone needs. Also if you are too confused you can expect a call back from Dell to guide you on the same. Other than this, they offer you a technical training to manage your network storage. Network Storage consist of option to go with various mode in which you believe your data is more secured.
Dell Storage Solution
Dell offers 4 different kind of Data Storage solution. They start from option provided for data recovery and backup to tape backup. So it is your choice looks better for your Network Infrastructure. I had provided a kind of short description for every section where you can find easy to understand what kind of storage is used for what. So here what is recommended that you should not buy stuff blindly. Because storage solutions are costly and you must invest wisely on them. Following are the four types of storage solution offered by Dell. The best thing to go with Dell is customization option provided. You can simply choose what you need and what you do not. On that basis you can choose the right product for your storage system.
Backup/Recovery & Archive : This is good for data protection. If you work in a environment where database is everything then you must go with this. Equipped with multiple support to keep a regular data backup and restore option allows get rid of any data issue appeared. It offers you continuous backup and recovery. I am also listing the products which are mentioned under this. The price and features also differs as per model. The higher you purchase the higher data security you gain. Many are equipped with their own operating system so that you can easily manage and configure this as you need.
- PowerVault RD1000 Removable Disk Storage - $409.00
- PowerVault LTO-3-080 Tape Drive - $2099.00
- PowerVault LTO-5-140 Tape Drive - $2649.00
- PowerVault 124T Tape Autoloader - $5463.00
- PowerVault TL2000 Tape Library - $5848.00
- PowerVault ML6010 Tape Library - $11399.00
- PowerVault TL4000 Tape Library - $13856.00
Networked Storage : This are similar to NAS storage where heavy data processing is carried out in easier way. The storage supports iSCSI and fiber channel support which offer free flow of data on higher bandwidth. This is further divided into more number of different storage system. I am not listing all the products but kid of storage devices you can find under this category. This is best recommended for a smaller architecture.
- Network Attached Storage : NAS is one of the most popular storage system used from longer time. It not only offer you a backup support but a different location where the data goes. So to some extent the user stays satisfied with data recovery. This technology offer you a centralized storage system recommended for file sharing and other purpose.
- iSCSI SAN Device - This is another storage solution support for a small architecture. You might have seen many popular iSCSI San devices which are available widely. The configuration and upgrade of NAS/SAN is quiet better where you do not need to do much. With better data transfer rate you can perform a number of options on San devices.
- EqualLogic Storage : This is something different but similar to iSCSI San. Here you can create a virtual environment of iSCSI storage. This eliminate the cost of implementing a entirely new hardware architecture.
- Object Storage : Massively scalable and Designed to intelligently access, store, protect and distribute fixed digital content.
- Dell Compellent Storage Center : Brings multi-protocol connectivity with NAS, Fibre Channel, Fibre Channel over Ethernet, and iSCSI from the same array.
Direct Attached Storage : This type of storage solution just tend to give you more space in your network. Attach them directly to your server and you done with the setup. Extra space let you run more programs and schedule a number of backup program. This removes the limit of space.
- PowerVault MD1200 Direct Attached Storage - $3699
- PowerVault MD1220 Direct Attached Storage - $3559
- Powervault MD3200/MD3220 Storage Arrays - $5850
Tape Backup : Even today tape backup are considered as the most cost effective solution for server storage. They offer you tape storage which is considered as one of the most efficient way of data backup.
- PowerVault Tape Drives : Nightly backups of a single server with less than 800GB
- Rackable Tape Drives : Weekly backups of one or two servers with less than 1.6TB
- Tape Automation : High-capacity, high-speed storage -- for use as direct server backup or as part of a SAN fabric
Hp Storage Solution
Hp is another product that is worth to discuss here. There are number of server storage solution provided by them also. Hp not only provides you a dedicated hardware for
storage support but also an application that can be used to manage your storage thing. They consist of a Disk backup system, a tape storage, storage blad, nas system, etc. Hp provides you more flexible solution to go for better storage options. Right-now there are number of option and some cost effective product which are worth to see.
Disk Storage Systems : Product under this section features better performance for wide network. You have a dedicated hardware which is connected on your server and available 24x for data backup. It is very simple to manage and you can configure nas on the same. The best part of this product is that any mid size business can afford it. It will not recommend this for a very large network. This system consist of various builds which has number of disk attached in them and they are connected directly to the server. The inbuilt interface manages the data flow and provides required stats.
NAS System : As explained above NAS are good for wide data management. They provide you better file sharing abilities. NAS storage are best recommended to store digital content and run automated backup solution. With ready to use option you can configure that easily on your network and enhance your productivity. There are products inside this section which offer you from small to large needs.
Tape Storage & Media : Tapes are reliable and cost affective. Your data is binded on tape drives which are secured and used when it is needed. There are less changes that data might get corrupted. A single tape drive can offer you more than 100Gb of data storage depends on the specification. Automated system with Tape storage allows you to avoid human error while data backup and better disaster recovery options.
And if you are too confused Hp offer you a option to choose the device as per need. Like choosing a device on the base of virtualized enviroment or by message and email requirment. In the same you can also go for a storage solution as per archiving facility.


text:
Shindig on the Green
June 12, 2014
The arrival of summer beckons both locals and visitors to gather in downtown Asheville's Pack Square Park to enjoy an old-fashioned, Appalachian "Shindig on the Green". Bring your own lawn chair or blanket, and dance under the stars to the … Continue reading
Want To Be a Judge For a Chef's Challenge Competition Dinner? Come Stay at Applewood Manor for Fire on the Rock
March 4, 2014
Do you love to give your opinion especially concerning food? You can be a participant and a judge for Fire on the Rock, North Carolina's state wide Chef's competition, running simultaneously (Asheville, Greensboro, Raleigh, Wilmington and Charlotte) on March 10-11 … Continue reading


text:
- Is CLI the same as ODBC?
- What is CLI server mode?
- Is there support for an exit program?
- What about teraspace and server mode?
- Where do I find information on SQLSTATE values?
- Can the CLI be used in threaded applications?
- How many CLI handles can I allocate?
- Can I access stored procedures with result sets?
Is CLI the same as ODBC?
For the most part, the SQL CLI is syntactically and semantically equivalent to ODBC. This is not to say that everything in the latest level of ODBC is supported, but an application that uses the most common routines will likely run against the CLI with few changes.
The SQL Call Level Interface is a standard created by the X/Open standards group, and our CLI was built in V3R6 according to that standard. ODBC is the Microsoft implementation of the X/Open CLI standard, and has veered off from the X/Open standard in a few areas. So, even though the CLI has been updated in several releases since V3R6, it will likely never match ODBC exactly, since that is technically not the standard that our CLI is built to comply with.
What is CLI server mode?
Server mode was introduced in V4R2 in a functional PTF. The reason for running in SQL server mode is that many applications have the need to act as database servers. This means that a single job will execute SQL requests on behalf of multiple users. In our current SQL implementation, this does not work for 3 reasons:
1) A single job can only have one commit transaction per activation group
2) A single job can only connect to an RDB once
3) All SQL statements run under the job's user profile, regardless of the userid passed in on the connect
SQL server mode will solve these 3 problems by routing all SQL statements to a separate job. The job will be taken from a pool of prestart jobs running in the QSYSWRK subsystem. There will be one job per connection, when running in server mode. The mechanism for "waking up" a prestart job includes the passing of a user profile, which causes the prestart job to swap from profile QUSER to the profile specified on the SQLConnect. If no user profile is specified on the SQLConnect, then the prestart job runs in the same user profile as the originating job. Since each connection is a separate job, there is no limitation on the number of connections to each database, and each job will have its own commit transaction.
Since the SQL is processed in a separate job, there will be no error messages sent from runtime SQL modules to your joblog. However, there is a new SQL7908 message sent to your joblog, which gives you the full job name of the prestart job that is being used to handle the SQL requests. This message will be sent for each successful SQLConnect performed while in server mode. Starting with V4R3, as a debugging aid, if any SQL error occurs, the joblog will be printed for the prestart job. Then using WRKSPLF for the effective user profile of the connection, one can find the relevant joblog.
Using SQL server mode also has another benefit. Since the SQL is processed in another job, the amount of shared resources across connections is drastically reduced. Simply put, more work can be done all at once, since they aren't all working with structures and memory in the same process. This allows threaded applications that use a different connection handle per thread to get much better performance, and more effectively exploit threads with SQL.
Read more about CLI Server mode in NEWS/400: "Using the SQL Call Level Interface as an SQL Server" by Mark Megerian.
How do I turn on server mode?
Here is a simple example of turning on server mode in a CLI program:
. . SQLHENV henv; SQLHDBC hdbc; SQLINTEGER attr; . . SQLAllocEnv(&henv); attr = SQL_TRUE; SQLSetEnvAttr(henv,SQL_ATTR_SERVER_MODE, &attr,0); SQLAllocConnect(henv,&hdbc); SQLConnect(hdbc,"SYSTEM1",SQL_NTS,"FRED", SQL_NTS,"NEWPASS",SQL_NTS); . .
Benefits when running in server mode
- There are 40,000 total handles allowed in server mode, compared to 500 total handles when not using server mode.
- The SQL statements are processed under the profile specified on the SQLConnect.
- Each connection can be committed or rolled back independently. This could also be considered a limitation, since some applications may want to commit or roll back multiple connections simultaneously, and would therefore not be able to use server mode.
- There can be multiple connections to the same relational database. If not using server mode, this would be an error condition.
- Threaded applications can run multiple threads simultaneously, provided each thread is working within its own connection handle.
Restrictions when running in server mode
- A job must set Server Mode on at the very beginning of processing, before doing anything else. The SQLSetEnvAttr call to turn on server mode must be done right after SQLAllocEnv, and before any other calls. Once its on, it cannot be turned off.
- The SQL all runs in the prestart jobs, as well as any commitment control. Commitment control must NOT be started in the originating job, either before or after entering server mode.
- When running server mode, the application MUST use SQL commits and rollbacks, either embedded or via the SQL CLI. They cannot use the CL commands, since there is no commitment control running in the originating job. The job MUST issue a COMMIT before disconnecting, otherwise an implicit ROLLBACK will occur.
- Interactive SQL cannot be used from a job in server mode. Use of STRSQL when in server mode will result in an SQL6141 message.
- SQLDataSources is unique in that it does not require a connection handle to run. When in server mode, the program must already have done a connect to local, before using SQLDataSources. Since DataSources is used to find the name of the RDB to connect to, we will support passing a NULL pointer for the RDB name on SQLConnect in order to obtain a local connection. This makes it possible for a generic program to be written, when there is no prior knowledge of the system names.
- When doing commits and rollbacks via the CLI, the calls to SQLEndTran and SQLTransact must include a connection handle. When not running in server mode, one can omit the connection handle to commit everything, but this is not supported in server mode since each connection (or thread) has its own transaction scoping.
- Statement handles must not be shared across threads. If threads are being used with Server Mode, each thread should allocate its own statement handles, or the application should have synch points to prevent multiple threads from working with the same handle at the same time. This is because one thread could overwrite return data or error information that another thread has yet to process.
Is there support for an exit program?
Yes. When running in server mode, it can be more difficult to set up debug or adjust other job attributes, since the work is done in a prestart job. To make this easier, support was added in V4R5 for a connect exit program. This means that you can have your own program invoked from the prestart job, and set whatever you want to set in that job, prior to it performing any SQL work.
The CLI Connection exit program is called by CLI through the registration facility. The exit program is called before the connection is made to the relational database. CLI must be running in server mode for the exit program to be called. The exit point supports one CLI Connection exit program at a time. This exit program can be used for such things as changing the library list depending on the user making the connection or to enable debug for the prestart job handling the SQL requests. The only parameter passed to the exit program is a CHAR(10) user profile. This allows you to control the actions of the exit program based on the user profile. For instance, if you wanted to run in debug mode, but did not want to affect other users of server mode on the system, you could register an exit program, and have that program only start debug after it determined that your user profile was passed as the parameter.
To register an exit program, use the command WRKREGINF
Required Parameter Group:
Connection user profile
QSYSINC Member Name: None Exit Point Name: QIBM_QSQ_CLI_CONNECT Exit Point Format Name: CLIC0100
What about teraspace and server mode?
Due to customer requests, the CLI will support teraspace and server mode together, beginning in V5R1. The nature of teraspace storage is that pointers to teraspace data cannot be passed across jobs, since the references are only valid for the job owning the storage. Since server mode is based on jobs passing pointers to each other, CLI programs using teraspace could not run in server mode.
In V5R1, an enhancement has been made to allow the server job to have visibility to the originating job's teraspace, therefore making the pointers valid within the server job. This enhancement allows programs compiled to use TERASPACE to run using SQL server mode.
Where do I find information on SQLSTATE values?
The first thing to understand is the relationship between the SQLSTATE and the SQLCODE. Every error has an SQLSTATE, which is a platform-independent error state value. SQLCODE is an error value that is returned by the CLI on SQLError as the native error. The SQLCODE error value is not guaranteed to be standard across platforms, but the SQLSTATE value is.
There is more SQLSTATE information in the tech studio. To find the SQLSTATE information, first click on CLI Programs, and then Debugging CLI.
A listing of SQLSTATEs and SQLCODEs is provided in appendix B of the manual
SC41-4611 DB2 for i SQL Programming
So, if you use SQLSTATE values, use either the manual or the web site indicated above. If you use SQLCODE, then either use the manual, or simply display the message description on your IBM i or AS/400 using the DSPMSGD CL command. Every SQLCODE corresponds to a message on the system. For instance, to display the details of SQLCODE -204, you could do:
Can the CLI be use in threaded applications?
The short answer to this question is Yes, meaning that the CLI code is thread safe, and you do not have to worry about putting synchronization points in your own code. The CLI implementation has its own mutexing logic to ensure that processing is effectively single-threaded at points in which its needed.
However, this is not to say that multiple threads will be able to simultaneously process SQL requests using the CLI. The only way to get any true multi-threading of SQL requests is to use CLI Server Mode.
How many CLI handles can I allocate?
The CLI supports up to 500 total handles per job. This includes all types of handles, including the environment handle, connection handles, statement handles, and descriptor handles. When running in CLI Server Mode the limit becomes 40,000 total handles, with up to 500 statement handles per connection.
In version 5, this changes significantly. The total limit becomes 80,000 handles regardless of server mode. The total limit of 500 goes away completely. A remote connection may still only have 500 statement handles.
Be aware that the CLI must internally allocate descriptor handles in some cases. So, for instance, if you allocate a statement handle, then bind variables to that handle, you may get up to 4 descriptor handles allocated for you. These count against the 500 handle limit. The four descriptor handles are the two PARAMETER descriptor handles, and the two ROW descriptor handles. The reason that there are two of each is that the CLI must separately maintain a default descriptor (this is known as the implementation descriptor) as well as a descriptor to keep track of the variables that have been explicitly bound by the application (this is known as the application descriptor).
So, in all, a single statement handle can have an implementation row descriptor, an application row descriptor, an implementation parameter descriptor, and an application parameter descriptor. To better understand these, think of a prepared statement that looks like this:
After the call to SQLPrepare, the implementation row descriptor would contain entries for ordinal positions 1, 2, and 3, and these would describe the data types and lengths of columns NAME, AGE, and SEX in the PERSONNEL table. So, the entry for NAME may be character of length 20. Then the application does an SQLBindCol and indicates the value for column 1 will be bound to a character variable of length 10, which is perfectly legal. Now the application row descriptor has one entry in it (the implementation row descriptor is not affected by the SQLBindCol).
Similarly, after the SQLPrepare, the implementation parameter descriptor has one entry, containing the type and length of the single input parameter, based on column AGE, which is a 4-byte integer. The application then uses SQLBindParameter to say that this value will actually be passed in using the float data type. This information will be stored in the application parameter descriptor.
How can I access stored procedures with result sets?
The SQL CLI fully supports stored procedures with result sets. The easiest example is the stored procedure with a single result set. In the following example, it is assumed that the stored procedure has already been created and registered on the system. This would be accomplished using the CREATE PROCEDURE statement in SQL.
. . SQLExecDirect(hstmt,"CALL MYLIB.PROC1",SQL_NTS); SQLBindCol(hstmt,1,SQL_INTEGER,&intval1,4,&fetchlen1); SQLBindCol(hstmt,2,SQL_INTEGER,&intval2,4,&fetchlen2); SQLBindCol(hstmt,3,SQL_CHAR,charval,10,&fetchlen3); rtnc=SQLFetch(hstmt); for(;rtnc==0;) { printf("COLUMN 1 is %i\n",intval1); printf("COLUMN 2 is %i\n",intval2); printf("COLUMN 3 is %s\n",charval); rtnc=SQLFetch(hstmt); } SQLCloseCursor(hstmt); . .
In the preceding example, the stored procedure leaves open a result set that the CLI code can fetch data from. This becomes a true CLI result set, in the sense that SQLFetch can be used to retrieve the data, and SQLCloseCursor must be use to close out the result set.
The example gets a bit more complicated when there is the possibility of more than one result set for a stored procedure. This requires the use of SQLMoreResults to process through the multiple result sets. Also, the preceding example was built with the assumption that the result set contained 3 columns, and that the first 2 columns were integers and the 3rd column was a character. The next example will check the number of result set columns and bind each column to an integer variable.
. . results=SQLExecDirect(hstmt,"CALL MYLIB.PROC1",SQL_NTS); for(;results==0;) { SQLNumResultCols(hstmt,&cols); for(colposition=1;colposition <= cols;colposition++) { SQLBindCol(hstmt,colposition,SQL_INTEGER,& intval[colposition-1],4,&fetchlen[colposition-1]); } rtnc=SQLFetch(hstmt); for(;rtnc==0;) { for(colposition=1;colposition <= cols;colposition++) { printf("COLUMN %i is %i\n",colposition,intval [colposition-1]); } rtnc=SQLFetch(hstmt); } /* The current result set has been fully read, move on to the next one. */ results=SQLMoreResults(hstmt); } . .
As with all stored procedures, make sure that the activation group is set to *CALLER for the program object. This is automatic for SQL stored procedures. For non-SQL stored procedures, if the activation group is *NEW or a named activation group, your stored procedure will not work properly. Result sets would be closed by activation group cleanup, and any changes made under commitment control in the stored procedure could not be committed or rolled back by the CLI application invoking the stored procedure.
Why are bound columns better than unbound columns?
This is a very important point for performance. There are many ways to generate a result set using the CLI. One can execute a SELECT statement; one can use the catalog functions, such as SQLTables and SQLColumns; one can execute a CALL statement to a stored procedure that has one or more result sets. When the application is ready to retrieve the data from the result set, it can bind each of the columns to a variable in the application and start using SQLFetch to process each row. This is the recommended approach. For each column in the result set, one should use SQLBindCol to bind each and every column. The SQLNumResultCols procedure can be used to determine how many columns are in the result set, and either SQLColAttributes or SQLDescribeCol can be used to determine the data type of each column. Going through this process results in "bound" columns. This means that when the SQLFetch is processed, the application has already done SQLBindCol for every column, so the CLI knows the address to store the value for each column in the row being fetched.
The alternative is "unbound" columns, and this is NOT recommended. Using unbound columns means that the user has not used SQLBindCol to bind each column to an address. Then when SQLFetch is processed, the CLI is forced to store each value in a temporary location of storage. Then after the SQLFetch, the application must use SQLGetData (or SQLGetCol) to retrieve each column's value from the temporary location.
Unbound columns are worse than bound columns because:
- The performance is significantly worse since the data has to be moved multiple times. First it must be moved from the database into the temporary storage location. Then it must be moved from the temporary storage location into the application's variables on the SQLGetData.
- System resources are used more heavily for unbound columns since the CLI must dynamically allocate storage for every unbound column. If enough unbound columns are used, and the columns are very large, it is possible to use up the storage allocated to the process, and the next action that requires storage will fail.
- Code complexity is worse with unbound fetches, since after every fetch, the code must perform an SQLGetData for every column in the result set. If each column was bound using SQLBindCol, then after each fetch, the data would already be in local storage, and no additional CLI calls would be required.
Therefore, we strongly recommend finding any places in your code where SQLGetData or SQLGetCol is used after the SQLFetch, and replacing this with SQLBindCol before the SQLFetch. Also note that your performance can be improved by omitting unneeded columns from your result set. Sometimes the shorthand notation "SELECT * FROM ... " is used when only a subset of the columns are really used. In those cases, change the SELECT statement to explicitly name each column that is truly required.
Must I always journal my files?
No. Files only need to be journaled when the user is running with commitment control, and will possibly be making database updates. The reason that journaling is needed in this case, is that when commitment control is being used, the application has the ability to commit a set of changes, or abort (roll back) a set of changes. These changes must be guaranteed to either all happen, or be completely backed out. The mechanism that the database uses to accomplish this is a journal. The journal keeps track of each change that has been made, and this journal entry, along with a lock that is placed on the changed row, ensures that it can be fully committed or rolled back.
If you are getting messages that you cannot open your database files because they are not journaled, you have several options:
- Journal your files. Okay, this is one is pretty obvious, but if you really want to use commitment control in your application, then journaling cannot be avoided.
- Turn off commitment control. The use of commitment control is the default for CLI programs, and must be explicitly turned off if it is not needed. Use the following example:
attr = SQL_COMMIT_NONE; SQLSetConnectAttr(hdbc,SQL_ATTR_COMMIT,&attr,0);
- Set your cursors to be read-only. This is a nice alternative, because you can still use commitment control for the purpose of locking records, but by designating that you will not update any records, the CLI will be able to run against files that are not journaled. Starting in V4R4, this is the default.
The following code sets a cursor to be read-only (or in SQL terms, FOR FETCH ONLY):
attr = SQL_TRUE; SQLSetStmtAttr(hstmt,SQL_ATTR_FOR_FETCH_ONLY,&attr,0);
This is recommended for all statements that will have result sets, unless you plan to use update-capable cursors. If you do not plan to exploit update-capable cursors, then switching to read-only cursors has several benefits.
- Files do not have to be journaled.
- Data can be blocked on retrieval, giving better performance.
- The optimizer can use indexes to improve the query performance.
How does AUTOCOMMIT work?
AUTOCOMMIT means that the user of the CLI does not want to do any COMMITs or ROLLBACKs. Every executed statement should be automatically committed upon successful completion.
Prior to V4R4, this was implemented by turning off commitment control. In other words, setting AUTOCOMMIT on was the same thing as setting the commit level to NONE. This means that files need not be journaled, and the user does not need to code their own commits and rollbacks. The limitations of this are that LOB locators cannot be accessed, and if the program calls an SQL stored procedure that does work under commitment control, those changes will not be committed. Prior to V4R4, those limitations may be a reason to not use AUTOCOMMIT.
In V4R4, there is support for true AUTOCOMMIT processing. This means that the AUTOCOMMIT attribute and the commitment control level are completely independent.
The following table summarizes the affects of AUTOCOMMIT and commit level settings:
|AutoCommit setting
|Commit level
|Statements do not run under commitment control and you do not need to journal database files. LOB locators cannot be used. If a statement fires a trigger or UDF that makes changes under commitment control, those changes will be rolled back.
|Statements do not run under commitment control and you do not need to journal database files. LOB locators can be used. If a statement fires a trigger or UDF that makes changes under commit, those changes are committed automatically by the database.
|Not none
|Statements run under commitment control and journaling of the database files is required. There are no unique restrictions on LOB locators, triggers, or UDFs. The application must issue its own commit statements.
|Not none
|Statements run under commitment control and journaling of the database files is required. There are no unique restrictions on LOB locators, triggers or UDFs. Commits are performed automatically by the database.
Can I do a blocked INSERT using the CLI?
Yes, beginning with V4R4, the CLI supports blocked INSERT statements. The application must indicate the number of rows to be inserted by calling the SQLParamOptions procedure. So if your application wants to insert 100 rows of data on a single call, it must first do the following:
long offset; long numRows = 100; SQLParamOptions(hstmt,numRows,&offset); /* the third parameter is not currently used */
Once that is done, your program does the SQLBindParameter calls and executes the statement using the following guidelines:
- The statement must be of the multiple-row form [i.e. INSERT INTO CORPDATA.NAME ? ROWS VALUES(?,?) ]. Even though there is an extra parameter marker (?) to indicate the number of rows, this value must not be bound by your program, since that value is provided by the SQLParamOptions. So in this example, you should only use SQLBindParameter for parameter numbers 1 and 2.
- The data to be inserted must be organized in a contiguous, row-wise fashion. This means that all of the data for the first row is contiguous in storage, followed by all of the data for the next row, etc.
- The addresses provided on SQLBindParameter will be used to reference the first row of data. All subsequent rows of data will be obtained by incrementing those addresses by the length of the entire row.
- The indicator pointer passed on the SQLBindParameter must also reference contiguous storage for all of the indicator values for all of the rows. If you are inserting 100 rows, with 2 columns per row, there would be 200 4-byte indicators. The SQLBindParameter for parameter 1 would pass the address of the first of those 200 indicators, and the SQLBindParameter for parameter 2 would pass the address of the second of those 200 indicators. The system would then obtain the addresses of all subsequent indicators by incrementing the initial addresses. That is why the storage for the indicators must be contiguous.
- The indicators should be initialized with 0. Any indicator can then be individually set if you want to indicate a NULL value for a particular column and row.
How do I use SQLExtendedFetch?
The function SQLExtendedFetch can provide a huge performance boost for applications that retrieve a large number of records. The basic purpose of SQLExtendedFetch is to give the application control over how many records should be retrieved on a fetch. If you use SQLFetch, then only one row will be retrieved, and the application need only provide space for one row of data. When using SQLExtendedFetch, the application must set aside storage for all the data that is going to be retrieved.
For an example, let's say that the application wants to retrieve 10 rows on one call to the CLI. This is a good idea for performance reasons, since you replace 10 calls down through the CLI and the underlying SQL runtime engine with a single call. Let's also say that the SELECT statement is going to return 3 columns, and they are 2 integers and a CHAR(10).
. . typedef struct { SQLINTEGER col1; SQLINTEGER col2; SQLCHAR col3[10]; } colstruct; colstruct rows[10]; SQLINTEGER fetchlen[30]; SQLSMALLINT outstat[10]; SQLINTEGER attr; . . . /* Allocate the statement handle */ SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt); /* Set FOR FETCH ONLY attribute to allow blocking and give better performance */ attr = SQL_TRUE; SQLSetStmtAttr(hstmt,SQL_ATTR_FOR_FETCH_ONLY,&attr,0); /* Prepare and Execute the Statement (could have also used SQLExecDirect) */ SQLPrepare(hstmt,"SELECT EMP_NUM, DEPT_NUM, DEPT_NAME FROM PERSONNEL",SQL_NTS); SQLExecute(hstmt); /* Bind each column to an address in the first array entry of our structure */ SQLBindCol(hstmt,1,SQL_INTEGER,&rows[0].col1,4, &fetchlen[0]); SQLBindCol(hstmt,2,SQL_INTEGER,&rows[0].col2,4, &fetchlen[1]); SQLBindCol(hstmt,3,SQL_CHAR,rows[0].col3,10, &fetchlen[2]); /* Indicate that 10 rows will be fetched */ numrows=10; SQLSetStmtAttr(hstmt,SQL_ATTR_ROWSET_SIZE,&numrows,0); /* Fetch 10 rows. */ SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&numrows,outstat); . . .
This puts 10 rows of data into the rows structure. Using subscript notation, the application can now process each row in a loop, with any further calls to the CLI. An important thing to remember is that there are 3 chunks of storage that the application must set aside for this. The first is the data itself, which must be contiguous storage large enough to accomodate the maximum number of rows to be fetched. The second piece is the length values, which are passed as the last parameter on the SQLBindCol procedure. This must also be contiguous storage at least this large:
(# rows) * (# columns) * (4 bytes) = total amount of storage.
Lastly, there is row status storage, which is 2 bytes per row. In our example, these three pieces of storage were declared as rows, fetchlen, and outstat.
If the application uses SQLExtendedFetch, but does not allocate enough storage for all of this data, there will be unpredictable results. This is because you are, in effect, telling the CLI to use that storage, starting at the addresses provided. If the CLI ends up going beyond the allocated storage, this will likely corrupt application storage. Also, EVERY column must be bound using SQLBindCol, prior to calling SQLExtendedFetch, or an error will occur.
How do I specify that a cursor is read-only?
Setting your cursors to be read-only is accomplished like this:
attr = SQL_TRUE; SQLSetStmtAttr(hstmt,SQL_ATTR_FOR_FETCH_ONLY,&attr,0);
where hstmt is the statement handle that you want to make read-only.
This is recommended for all statements that will have result sets, unless you plan to use update-capable cursors. If you do not plan to exploit update-capable cursors, then switching to read-only cursors has several benefits:
- Files do not have to be journaled.
- Data can be blocked on retrieval, giving better performance.
- The optimizer can use indexes to improve the query performance.
An important thing to remember is that this attribute ONLY applies to SELECT statements. Therefore, if the same statement handle is going to be used for a SELECT and then later for an UPDATE statement, this attribute is still recommended. This is because an SQL statement such as UPDATE, INSERT, or DELETE is known to update data, and there is no decision that has to be made by the optimizer on whether blocking and index usage should be allowed. On the other hand, a SELECT statement can be used for either reads or updates, and the optimizer does not know in advance what the application intends to do, so it must assume that the application MIGHT want to perform updates via the cursor. Setting the FOR FETCH ONLY attribute takes away the assumption, and allows the optimizer to make the choices that will result in the best possible performance.
In V4R4, the default behavior is for cursors to be read-only.
How do I use update-capable cursors?
First, a few definitions:
- A cursor is a term used to designate a result set. After executing a SELECT statement, your program has an open cursor. Executing a CREATE TABLE statement does not use cursors at all.
- A read-only cursor is a cursor that can only be used for reading (fetching) rows of data.
- Finally, an update-capable cursor is a cursor that can be used to fetch a row, then update the row on which the cursor is positioned. This type of processing is not very commonly used, which is why most applications can safely set all their cursor to be read-only cursors.
For those applications that need to use update-capable cursors, here is a code fragment:
. . SQLHSTMT hstmt1,hstmt2; SQLCHAR curname[SQL_MAX_CURSOR_NAME_LEN]; SQLCHAR updateStmt[200]; SQLSMALLINT outlen; long attr; . . . /* Allocate 2 statement handles */ SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt1); SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt2); /* Set FOR FETCH ONLY attribute to FALSE to allow updates */ attr = SQL_FALSE; SQLSetStmtAttr(hstmt1,SQL_ATTR_FOR_FETCH_ONLY,&attr,0); /* Prepare and Execute the Statement (could have also used SQLExecDirect) */ SQLPrepare(hstmt1,"SELECT EMP_NUM, SALARY FROM PERSONNEL",SQL_NTS); SQLExecute(hstmt1); /* Bind each column to an address */ SQLBindCol(hstmt1,1,SQL_INTEGER,&col1,4,&fetchlen1); SQLBindCol(hstmt1,2,SQL_INTEGER,&col2,4,&fetchlen2); /* Fetch a row. */ SQLFetch(hstmt1); . . /* Obtain the cursor name from the SELECT statement, and append it to the UPDATE statement */ strcpy(updateStmt, "UPDATE PERSONNEL SET SALARY = SALARY + 5000 WHERE CURRENT OF "); SQLGetCursorName(hstmt1,curname, SQL_MAX_CURSOR_NAME_LEN,&outlen); strcat(updateStmt,curname); /* Prepare and Execute the Statement (could have also used SQLExecDirect) */ SQLPrepare(hstmt2,updateStmt,SQL_NTS); SQLExecute(hstmt2); . .
The UPDATE statement will add 5000 to the SALARY column for the current row of the cursor. In the above example, there is only one call to SQLFetch, but a complete application would likely give the user the ability to go through several calls to SQLFetch, until the cursor was positioned on the row to be updated.
Does the CLI use extended dynamic SQL?
No. Extended dynamic SQL is a type of SQL processing in which prepared statements are stored away for future use, without the need for a re-prepare. The CLI does not use this technique. Every statement that needs to be processed must either be prepared each time, or executed directly using SQLExecDirect.
However, for performance reasons, the SQL engine has a prepared statement cache, which allows some programs to behave more like extended dynamic SQL. Using the cache, the SQL engine stores away information about prepared statements, and keeps this information in system-wide storage. Then, when the same statement is executed again, even if its by a different user and a different job, the statement will run much faster. This is because the information stored away, such as internal structures, and optimizer information, can sometimes be very CPU-intensive to reconstruct every time. Storing the information for reuse saves system resources, and speeds up CLI applications that use the same SQL syntax multiple times. Another benefit of this function is that the user does not have to turn it on, or configure it in any way. It is part of normal SQL processing.
How can I improve my CLI performance?
Several other questions in this FAQ deal with performance issues. We will attempt to list the more important ones here, along with others that were not mentioned elsewhere:
- Avoid using unbound columns (see unbound columns)
- If the same SQL statement is to be used multiple times, use SQLPrepare once, then use SQLExecute each time you want to run the statement. This is much faster than using SQLExecDirect every time.
- Allocate your CLI environment at the very beginning of processing, and avoid freeing it unless the application (or job) is really ending. This is because there is some setup that is done when the CLI environment is allocated, and this must be cleaned up when the environment is freed. If the job is going to process this many times, there are resources wasted by continually setting up and freeing the environment. Furthermore, leaving it around has no drawbacks, since you can call SQLAllocEnv many times over, it just returns the environment handle if one already exists.
- Make use of SQLExtendedFetch when processing large numbers of rows (see SQLExtendedFetch)
- Consider turning off null-termination. By default, the CLI will null-terminate all output strings. This can be costly, especially when fetching many rows that have character fields. It can be turned off with the following 2 lines:
int attr = SQL_FALSE; SQLSetEnvAttr(henv,SQL_ATTR_OUTPUT_NTS,&attr,0);
- Set all cursors to be read-only, unless you have an explicit use of update-capable cursors in your application (see read-only cursors)
- If you need to use the catalog functions, try to limit the number of times they are used. Also, try to limit the scope of the queries by providing very narrow search criteria. Catalog functions on the IBM i and AS/400 go out to system-wide cross reference files which can get to be extremely large. Also, the queries of these files are very complex, and CPU-intensive. Therefore, since so many rows of data need to be processed, these functions are among the longest running functions in the CLI.
- Turn off commitment control, unless your application relies on it. Commitment control processing adds code path for locking, journaling, inter-component system calls, etc.
How can I map between character and numeric types?
Beginning in V4R5, the CLI allows you to convert between character types and the various numeric types, such as float, integer, and decimal. This conversion can occur on input parameters, and can also occur for output columns of a result set.
Mapping numeric columns in a result set to character variables in your CLI program is very easy. All you have to do is bind the columns like this:
char c1[10],c2[10]; long outl1,outl2; SQLExecDirect(hstmt,"SELECT numval1, numval2 FROM TESTDB.NUMTABLE", SQL_NTS); SQLBindCol(hstmt, 1, SQL_C_CHAR, c1, 10, &outl1); SQLBindCol(hstmt, 2, SQL_C_CHAR, c2, 10, &outl2); SQLFetch(hstmt);
Regardless of whether numval1 and numval2 are float, or integer, or decimal columns, the CLI will convert each value into its character representation. You should make sure that the data is formatted properly to suit your needs, since different data types can result in different output attributes, such as leading and trailing blanks, location of decimal point, and truncation of insignificant digits.
Mapping input character strings to numeric is a little bit different. On the bind, you must specify the target data type, and the CLI layer will perform the conversion. For example:
char outval1[5],outval2[5],outval3[5]; long outl1,outl2,outl3; SQLBindParameter(hstmt,1,1,SQL_C_CHAR,SQL_DECIMAL,5,0, outval1 ,0,&outl1); SQLBindParameter(hstmt,2,1,SQL_C_CHAR,SQL_FLOAT,0,0, outval2 ,0,&outl2); SQLBindParameter(hstmt,3,1,SQL_C_CHAR,SQL_INTEGER,0,0, outval3 ,0,&outl3); outl1 = SQL_NTS; outl2 = SQL_NTS; outl3 = SQL_NTS; strcpy(outval1,"123"); strcpy(outval2,"456"); strcpy(outval3,"789"); SQLExecDirect(hstmt, "INSERT INTO TESTDB.NUMTABLE2 VALUES( ?, ?, ?)",SQL_NTS);
This demonstrates converting the input character strings to decimal(5,0), float, and integer. Note that only for SQL_DECIMAL was there a precision and scale provided. For integer and float the lengths are implied by the data type.
Where is the CLI header file?
The CLI header file is required to be included in every program that uses the CLI. C programs bring this in using:
#include <sqlcli.h>
To actually browse the header file on the IBM i and AS/400, look in member SQLCLI in the file QSYSINC/H.
Is there a CLI trace?
Yes. The CLI has a trace function built into the code, starting with V4R3. To turn on the trace, use the following command:
This example turns on *INFO level tracing for the current job. The *INFO level is what is needed for the CLI to start writing out trace records. For a long-running program that uses many CLI calls, this trace can fill up quickly. The CHGCPATRC also has parameters for specifying the buffer size for the trace, whether the trace should wrap when full, and whether the buffer should be resized. Also, note that trace can be turned on for jobs other than *CURRENT, by simply specifying the job number. This allows you to run the CLI trace against batch jobs, prestart jobs, etc.
After turning on the trace, and running a CLI program, use the DSPCPATRC command to see the trace records. You will see every CLI function call, along with a display of the parameters. This may be helpful in debugging problems, or just to identify how many times a certain function is called.
An alternative for those that do not have the CHGCPATRC and DSPCPATRC commands on their system is to use the CHGUSRTRC and DMPUSRTRC commands instead. However, there is one extra step. When doing the CHGUSRTRC to set the buffer options, you will notice that this command does not have a way to set the level of tracing. This is accomplished by doing:
CALL QSYS/QP0WUSRT parm('-l 2' '-c 0' 'xxxxxx')
where the 'xxxxxx' is the job number of the job you want to trace. Make sure you specify the program name correctly, or simply cut and paste the above line. The program is spelled Q, P, then the number zero, and the first parameter is a lower case L.
All the CLI trace records start with 'SQL CLI:' in the text. Since there may be trace records from non-CLI functions, such as threads APIs, you can use that value to quickly locate CLI trace records. Another option is to query the temporary file that contains the data, and use search criteria to just display the CLI trace records.
For instance, if your DSPCPATRC output shows the following:
Display Physical File Member File . . . . . . : QAP0ZDMP Library . . . . : QTEMP Member . . . . . : QP0Z886434 Record . . . . . : 1 Control . . . . . Column . . . . . : 1 Find . . . . . . . *..+..1..+..2..+..3..+..4..+..5..+..6..+..7..+... 886434:222784 SQL CLI: SQLAllocHandle ( 1 , 0 , SQLINTEGER* ) 886434:246288 Qp0zSGetEnv(QIBM_USE_DESCRIPTOR_STDIO) 886434:246976 Qp0zSGetEnv(QIBM_USE_DESCRIPTOR_STDIO): Could not find string 886434:513040 SQL CLI: SQLSetEnvAttr ( 1 , 10004 , 1 , 0 ) 886434:513352 SQL CLI: SQLAllocHandle ( 2 , 1 , SQLINTEGER* )
You can filter out everything except the CLI trace records. Run the following SQL statement using either Interactive SQL or any query tool
Is there a way to dump all the CLI handles in use?
Yes, there is. Then again, if there wasn't, would this question be in the FAQ? :-)
In release V4R5, a tool was added to dump all CLI handles currently allocated. This can be done for the current job, or for any other active job on the system. The output of this tool is a spooled file. Display the spooled file, and you will see all allocated environment handles, connection handles, statement handles, and descriptor handles. The tool also displays the attributes of each, such as telling you which statement handles have been allocated for each connection.
To dump the CLI handle array, CALL QSYS/QSQDMPHA. Then work with your spooled files to see the output.
To dump the CLI handle array for a job other than the one from which you are issuing the command, CALL QSYS/QSQDMPHA PARM('xxxxxx'), where 'xxxxxx' is the job number of the job that is currently running CLI.
Common errors
Connection errors
Local relational database not defined
In order to use the SQL CLI, or any SQL interface, there must be an entry in the system's relational database directory that names the local database. In almost every case, this local entry should match the name of the system.
Run the following command:
Where SYSNAME is the name of your system's Default Local Location name (as specified in the DSPNETA command).
Relational database not defined (SQLSTATE 42705 SQLCODE -950)
Any data source that is specified on the SQLConnect must be defined in the system's relational database directory. Use the WRKRDBDIRE command to see entries already defined, or to add new entries to this directory.
Package creation errors
Obsolete packages exist
If your connections are failing, and the message SQL0144 is appearing, this indicates that the server you are connecting to has obsolete CLI packages. These can be deleted by running the following statement on the server system that is returning the error:
The error can also be identified by an SQLSTATE of 58003, and native error & SQLCODE of -144. Once you have deleted the obsolete packages from that server, the next successful connection to that server will automatically create a new SQL package.
SQL packages are used by the CLI to communicate information to remote systems. An early release of the CLI only used 200 handles. Therefore the packages were built with 200 entries (called section numbers). When the CLI increased to 500 handles in non-server mode, and 500 statement handles per connection in server mode, the packages needed to be rebuilt.
Packages do not create when connected using TCP/IP
There are limitations in the TCP/IP support when using Distributed Relational Database (DRDA) processing. In some releases, support of 2-phase commit via TCP/IP is not supported. This means that remote connections using TCP/IP get classified as read-only connections. In order for these remote connections to be update-capable connections, there needs to be support for 2-phase commit. As a result, package creation, which is not allowed for read-only connections, will fail. A solution is to connect using SNA protocol, just once, in order to get the packages created.
There is a Java program supplied by the system to create the packages on a remote system. To use the tool, you just have to run the following command from the CL command line. Specify the system you wish to access in the 'system' parm. The 'user' and 'password' parms are the values that will be used to get the connection and create the packages needed for later use. You only need to run this tool once for any system that you are going to use CLI to connect to.
JAVA CLASS(com.ibm.db2.jdbc.app.DB2PackageCreator) PARM('system' 'user' 'password')
Packages do not create when connecting with no commitment control
The package creation phase is a step that must run under commitment control. Therefore, if the very first connection to a remote system is with COMMIT NONE, then the packages will not create properly. A simple solution is to make sure that you connect at least once to a new system with the default level of commitment control, which is COMMIT CHANGE. Once this has been done, a connection to that system will recognize that the package already exists, and will not attempt to create one.
As shown above, you can also use the Java tool to create the packages.
Commitment control errors
Using SQLEndTran and SQLTransact
A common error is that an application changes to not use commitment control, but still has the SQLEndTran (or SQLTransact) statement in their code. This will fail, because there is no "commit definition" that the system can commit or roll back. If the application sets the commitment control level to NO COMMIT, or turns on AUTO COMMIT mode, then any calls to SQLEndTran or SQLTransact can be removed.
The same error in reverse is when an application makes changes under commitment control, but does commit the work. If the job then ends with these changes still pending, the transaction will be rolled back, and the changes lost.
If the commit is performed like this:
Then all cursors have been implicitly closed by the SQL runtime engine. If this is done before your application has performed an SQLCloseCursor on each open cursor, then there will be a mismatch in the CLI state of that handle. Therefore, you should always close cursors before using option SQL_COMMIT or SQL_ROLLBACK. An alternative is to use SQL_COMMIT_HOLD or SQL_ROLLBACK_HOLD. These options do not close cursors, and allow your application to leave cursors open, if desired.
Problems with closing cursors
Cursor already open (SQLSTATE 24502 SQLCODE -502)
If a statement with a result set has been processed, then the application must close the cursor. This can be accomplished using SQLCloseCursor, or by using SQLFreeStmt with the SQL_CLOSE option. Both of these will close an open cursor, if one exists. This allows the statement handle to prepare and execute a new SELECT statement. If the previous cursor was never closed, you will either get a Function Sequence Error (error code 10) from the CLI, or a Cursor Already Open (SQLSTATE 24502) from runtime SQL.
Cursor not open (SQLSTATE 24501 SQLCODE -501)
This can be caused when the cursor has been closed by some other system function, before the application issued the explicit close. Doing a COMMIT or ROLLBACK, without the HOLD option, can cause this. Also, the termination of an activation group can cause this. To avoid this error, always close cursors when the application has completed processing the result set.
Another situation in which this error can occur is when the SQL cleanup routine has been executed. This occurs when your application has ended, even if you intended to continue using the cursors. If you have a main program on the stack, and this program stays active for the duration of the application, you should place your SQLAllocEnv in this main program or procedure. This prevents the SQL cleanup routine from closing your open cursors.
Data mapping errors
Trying to map numeric data into character variables
The SQL engine does not map numeric data to character variables, prior to V4R5. Anytime an application binds a character variable to a numeric column, either the SQLExecute or SQLFetch will fail with a type mismatch error. When running on V4R5 or later releases, the CLI handles this conversion. For more information, see character/numeric conversion.
Using DATE, TIME, and TIMESTAMP column types
The SQL engine always returns DATE, TIME, and TIMESTAMP data in character form. So there is no reason to bind these columns to anything other than SQL_CHAR. A character variable of length 10 can accomodate any date value. For TIME and TIMESTAMP, use character strings of length 8 and 26, respectively.
Working with DECIMAL and NUMERIC column types
There are some common errors for using DECIMAL (packed decimal) and NUMERIC (zoned decimal). When you use SQLBindCol, SQLBindParam, or SQLBindParameter with these types, you need to tell the CLI what your variable is defined as. So the only time to use SQL_DECIMAL and SQL_NUMERIC on these functions is when you have actually declared the variable as either packed or zoned decimal in your program. The packed decimal is the far more common case, so we will focus on that example. Let's say you have used the proper header file and C syntax to declare a packed decimal with precision and scale of 12,2. This means that for SQLBindCol, the 3rd parm must be SQL_DECIMAL, and the 5th parameter must be (12 * 256) + 2 = 3074. The 3074 is needed because SQLBindCol does not have separate parms for precision and scale, so the values must be passed as one composite value. For SQLBindParam, the SQL_DECIMAL constant must be used for both the 3rd and 4th parameters. 12 and 2 should be passed as the 5th and 6th parameters to indicate precision and scale. For SQLBindParameter, similar rules apply. The SQL_DECIMAL constant must be passed for the 4th and 5th parameters, and the precison and scale (12 and 2) are passed as the 6th and 7th parameters.
Running out of CLI workspace
SQLDA not valid (SQLSTATE 51004 SQLCODE -822)
This error may be an indication that the CLI has exhausted its internal workspace. This situation can be caused by extremely high use of unbound fetches, or by an application that runs for a very long time without ever freeing the CLI environment, or disconnecting.
To avoid this error on systems running V2R2 or earlier releases, remove any unbound fetches (see unbound columns), try to periodically reset the CLI environment using SQLFreeEnv, or simply reduce the number of handles being used. Another heavy user of internal workspace is SQLPutData, so analyze your application to see if any calls to SQLPutData can be removed. Taking one or more of the above actions may solve the problem entirely, or may just allow your program to run longer before getting the error.
In V4R3, the amount of internal workspace was increased significantly, and the CLI is far more efficient in its use of workspace. The main differences in V4R3, with respect to workspace are:
- There is 48MB of workspace per connection. In V4R2, there was 16MB of workspace for the entire CLI environment.
- SQLPutData() and SQLParamData() no longer use up workspace.
- The workspace for a connection is completely reclaimed on an SQLDisconnect(). In V4R2, the workspace could not be reclaimed until an SQLFreeEnv().
SC41-5806 DB2 for i SQL Call Level Interface SC41-4611 DB2 for i SQL Programming SC41-4612 DB2 for i SQL Reference Tech Studio CLI Programs Information Center DB2 Books
Contact an IBM Sales Specialist
- Email IBM
- Find a Business Partner
- Call IBM: 1-866-872-3902
Priority code: Power


text:
Welcome to SwingTowns.com! Meet Platteville swingers today. Find swingers free at our Platteville swingers site.
alex1245 | Average
Love to hav... see full profile
sex... | Curvy
You must be a member to view this p... see full profile
darklight452 | Curvy
Looking for a couple to take my... see full profile
Shadowmist | Average
I try to have as much fun in li... see full profile
Beachgirl92 | Athletic
New to the LS and want to explo... see full profile
dmzone | Curvy
Person. Not just sexy, but also... see full profile
swingwme74 | Average
KINKY FREAKY WILD... FUN OUT GO... see full profile
LoLeeTa | Average
Nice girl. see full profile
No matter if you're seeking some hot steamy evenings with Platteville Single Swingers in town or friends with benefits, take it slow at first. If you appear too pushy in your initial contact, it can be a huge turnoff. The provocative part for swingers is the thrill of the anticipation of something new. Finding Platteville threesomes online is simple. Once strangers, those who make a small effort in email and ims on the computer really do meet in person, and enjoy swingers offline!


text:
Update on GracielaGraciela continues with her activity selling basic staples in a neighborhood store. She relates that she did well with her previous loan since she used it to buy eggs and milk. On this occasion, she requests the loan to buy merchandise like grocery items, soft-drinks, a variety of candy and cookies to stock her store. She feels happy and grateful to the institution for the support provided.
Previous Loan DetailsGraciela is 53 and single. She has one son who is 25 and is already living on his own. Graciela sells eggs and milk, staples in her neighborhood store in the Palmira area. This loan is the third in a sequence with Kiva partner Emprender. Graciela will use this loan to buy milk and eggs in... More from Graciela's previous loan »
Additional Information
About EmprenderEmprender has been working in Bolivia since 1999. It is dedicated to becoming a key tool in the development of its clients and the improvement of their quality of life. Operating in three of Bolivia's major cities – La Paz, Cochabamba, and Santa Cruz – Emprender offers both urban and rural clients the opportunity to obtain financial products tailored to fit their needs and businesses. These products include housing loans, salary loans, "opportunity" (short-term) loans, and higher education loans. To better the quality of life for its clients and non-clients through non-financial services, Emprender offers free medical consultations and health classes given by trained doctors.
Concurrent and Successive Loans
Our Field Partners often work with borrowers over a series of loans as the borrowers build credit, take out bigger loans, and expand their businesses. In order to make it easier for our Field Partners to post loans for borrowers who have been listed on Kiva before, we allow them to post successive and concurrent loans for their Kiva borrowers. This means that our Field Partners are able to post a borrower's second, third, etc., loan on Kiva without having to re-enter all of the borrower's information.
This borrower has been listed on Kiva before, so you'll see an updated loan description, as well as excerpts of the original descriptions from earlier loans. Most borrowers take out loans consecutively, meaning that they receive a second loan after having repaid the first. However, sometimes our Field Partners give out concurrent loans, allowing borrowers to take out one primary loan and a secondary "add-on" loan along with it. These "add-on" loans are typically smaller than the borrower's primary loan and serve a different purpose. Because Field Partners can now post loans as successive and concurrent loans, you will be able to track borrower progress over time and see the various ways a borrower is working with our Field Partners through funds from Kiva's lenders.
About Bolivia
113View loans »
Success!! The loan was 100% repaid
- Repayment Term
- 13 months (Additional Information)
- Repayment Schedule
- Monthly
- Pre-Disbursed:
- Nov 23, 2012
- Listed
- Dec 11, 2012
- Currency Exchange Loss:
- Possible
- Ended:
- Nov 17, 2013
Photo from previous loan
Kiva allows our Field Partners to re-use the same photo for individual borrowers that have been posted on Kiva's website once before in a 24 month period, and we allow them to re-use group photos for up to 24 months, provided that 80% of the current group's membership is represented.
Taking, collecting, and uploading photos of borrowers is one of the most challenging elements of using Kiva for our Field Partners. In order to make Kiva easier for Field Partners to use, we have allowed them to post successive and concurrent loans without taking a new photo of the borrower if the criteria above are met.


text:
Rated : 4.75 based on 16 votes.
Key Hacks: [1] - Next Level
Collect all the parts of the key to open the exit door and then find your way through the maze before your timer runs out.
If you have any problems viewing this game please fill out the details below. Before reporting a broken link / game please make sure of the following:
Plays: 123707
Plays: 100463
Plays: 91026
Plays: 69996
Plays: 55252
Plays: 52036
Plays: 45105
Plays: 42386


text:
"I LOVE NEW YORK" Top 5 Page for this destination Long Island by ghurly
Long Island Travel Guide: 124 reviews and 203 photos
New York has always been known for it's financial & fashion capital city - the Big Apple. However, there is also a part of this state where everything is green, tranquil and all natural - Upstate New York. Here lay the gentle rolling hills, the scent of pine and woods, sunshine beaming through cotton clouds all enveloped in one spectacular domicile.
Oh what a great time to take a dive in thae cool waters of the beach!! This shot was taken at Robert Moses, Fire Island.
Reviews (4)
Summer in the beach cannot be complete without the ever present and watchful lifeguards. Thanks to them for keeping us... more travel advice
Sand Castle building is the No. 1 activity for the kids. With colorful toy tools, they can really be creative. more travel advice
There's a lot of things you can do when you are in the beach. And one of the most popular is Beach Volleyball! Come &... more travel advice
Robert Moses Fire isalnd is one of the most visited beaches in Long Island. With wonderful sands and cool waves, it... more travel advice
Comments (8)
Would still be great to see this page moved to the correct location rather than in the middle of the Adirondacks, where you have it. Pam :-)
hoping for some time on Long Island soon.
You placed your Long Island page on an island in the middle of Indian Lake in the Adirondaks
Sandcastles beach volleyball Lifeguards , looks like great fun to me , great stuff Girlie. let's see more .Well that life guard is still doing his job eh Girlie . How are you going Girlie ??
Beautiful page. I like your photos
hey, Girlie, tell me the truth... did you build the sand castle at the beach that day??? ;-)
Hi Girlie, you must put more. You don't really expect me to believe you took the pic of the lifeguard because of safety do you,lol!! Thanks, David
excellant start...keep going ...pls build pages when you get time
Long Island Travel Guide
Member Travel Pages
- "Long Island, Someone Could Make a Fortune Here"
- "Welcome to Long Island !!!"
- "Place where we really live :-)"
- "The place from which I was born"
- "Long Island"
- See All...
- Things to Do in Long Island
- Hotels in Long Island
- Transportation in Long Island
- Nightlife in Long Island
- Restaurants in Long Island
- Shopping in Long Island
- Warnings and Dangers in Long Island
- See All...
Badges & Stats in Long Island
- 4 Reviews
- 7 Photos
- 0 Forum posts
- 8 Comments
- 1,102PageViews
- See All Stats
- See All Badges (3)
Have you been to Long Island?Share Your Travels
Latest Activity in Long Island
- Uploaded a Photo to "I LOVE NEW YORK"
- updated a Long Island Travel Page "I LOVE NEW YORK"
- Wrote a Review The Lifeguard in Long Island Tourist Traps


text:
Chic Fall Cape
About this project
CraftsSewing • Dressmaking •
Posted By
Modesty FashionsCharlotte, North Carolina, US
A week or so ago, I did a how to on a DKNY Bag I saw on Net-a-Porter (http://www.cutoutandkeep.net/projects/dkny-inspired-bag).
For the bag I used a tartan fleece type of fabric and denim. Tartan is in this fall season and capes are too. Since I had a whole unused bolt of this fabric, I decided to put it to use a bit more by making a matching cape.
After looking at tons of pictures of capes from various high end online retailers, I came up with this. It's very easy to make.And, I hope you guys enjoy making it.
I look forward to seeing all of your amazing versions!!
well...let's get started!!
You Will Need
- Cost
- Reasonably Priced
Step 5
Try your cape on and mark where you want the belt hole to go. Your belt will go through one side and out the other
Create 3 1/4" long slits for the belt.
I used the button hole feature on my sewing machine to create the belt holes.
If you have a buttonhole feature on your machine, use it to create the belt holes.
Create the holes for the belt in front first. Then, use the front holes as guides to create belt holes for the back
Step 9
For a more professional finish, we'll attach the collar with a french seam (don't panic it's really easy)
Pin the collar on wrong sides together. As you pin create small pleats until the collar lines up with the neckline end to end. It helps pin the end first and work your way to the middle.
Sew using a 1/4" seam allowance
Now, fold the collar back so the right sides are together. Pin and sew using a 1/2" seam allowance.
Top stitch the seam allowance down to the inside of the cape.
This is exactly what I am looking for in the shops right now! Thanks for saving me money! I can't wait to make it and post my version
I love Capes! And this was so easy!
This looks store-bought, yet so easy to make! Nice!!
Looks very chic.


text:
Colorado Highlights
- People living with an HIV or AIDS diagnosis in 2012: 11,558
- New HIV diagnoses in 2013: 329
- Deaths in 2012 due to HIV/AIDS: 106
- 89% of people living with an HIV diagnosis in 2012 were men, 11% were women.
- 14% of people living with an HIV diagnosis in 2012 were black, 20% Hispanic/Latino, and 64% white.
- In 2012, 78% of HIV cases in men were from male-to-male sexual contact, 6% were from injection drug use, and 12% were from injection drug use and male to male sexual contact.
- In 2012, 72% of HIV cases in women were from heterosexual contact, and 26% were from injection drug use.
Demographics, 2012
Estimated HIV Prevalence Rate Ratios by Race/Ethnicity, 2012
The rate of black males living with an HIV diagnosis is 3.1 times that of white males.
The rate of Hispanic/Latino males living with an HIV diagnosis is 1.1 times that of white males.
The rate of black females living with an HIV diagnosis is 16.3 times that of white females.
The rate of Hispanic/Latina females living with an HIV diagnosis is 2.1 times that of white females.
Estimated Percent of Adults/Adolescents Diagnosed with AIDS Within 12 Months of Initial HIV Infection Diagnosis, 2012
Estimated Percent of Persons Living with an HIV Diagnosis, by Transmission Category, 2012
Male Transmission Categories
- Injection Drug Use (5.7%)
- Heterosexual Contact (4.1%)
- Other* (0.5%)
- Male-to-Male Sexual Contact (77.9%)
- Male-to-Male Sexual Contact & Injection Drug Use (11.7%)
Female Transmission Categories
- Injection Drug Use (26.1%)
- Heterosexual Contact (71.5%)
- Other* (2.4%)
*Includes hemophilia, blood transfusion, perinatal exposure, and risk factor not reported or not identified.
Age-Adjusted Rates of Death Due to HIV Disease, 2010-2012
HIV Federal Funding/ProgramsFederal HIV / AIDS Grant Funding, FY 2013
Sexually Transmitted Diseases, 2012
ChlamydiaNational Rank: 28
Min. Rate Among States 168Max. Rate Among States 774422.7
ColoradoRate per 100,000 population
GonorrheaNational Rank: 37
Min. Rate Among States 6.7Max. Rate Among States 230.855.2
ColoradoRate per 100,000 population
Primary & Secondary SyphilisNational Rank: 21
Min. Rate Among States 0.2Max. Rate Among States 9.54.1
ColoradoRate per 100,000 population
Data Methods
Read more about the methods used to collect these data.


text:
上海静安愚园东路28号3号楼一楼 新车间
报名参加 Sign Up
Learn the basics of designing your own PCB, you can use free tools such as EagleCAD (freemium) or kicad (opensource). For this we'll use EagleCAD first learn how to layout the schemetrics and then move into the layout tool and layout your very first PCB.
We will design and Layout our very own Micro controller called "Annoying ATTron" using the ATTiny85 which is compatible with Arduino Core with a few addons but just 6 pins to play with and no external crystal needed. we'll also use autoroute for the routing quickly, and you dont like it, no problem, on your own time after the workshop you'll be able to handroute.
We'll use 0805 SMD components as much as possible because drilling holes just suck!
it's ideal for both kids and adults without programming or electrical knowledge.
Time: July 11th 2pm – 5pm (3hours)
(The workshop will be conducted mostly in English, and will provide basic Chinese translation if needed.)
What you must prepare:
1. Download EagleCAD and activate the freemium version: www.cadsoft.de/freeware.htm
2. Bring your computer and yourself 🙂
Fee: 300RMB; XinCheJian members enjoy reduced fee at 200RMB.


text: Residents return home after Derry hoaxes 26 Oct 2013 Two security alerts in the Waterside area of Londonderry have been declared hoaxes by police. Share Share Share Story by UTV Staff, Belfast Homes had been evacuated at Mimosa Court, Gobnascale, following the discovery of a suspect device overnight.A controlled explosion was carried out by army bomb experts on Saturday morning and the object declared a hoax. The YMCA centre in Drumahoe had been made available for residents. They have since been allowed to return home.Pat Ramsey, SDLP MLA for Foyle, said the discovery had resulted in many vulnerable residents being forced from their homes."Whoever this device was aimed at, those responsible have attacked the whole community," he said."The SDLP condemns this attack and I call on those who have planted this devise to stop immediately."Meanwhile, a second alert also in the Gobnascale/Top of the Hill area was sparked when a suspicious object was reported at around 11.10am. It was declared a hoax later that afternoon.Bridget Meehan, Waterside councillor for Sinn Féin, said those behind the bomb alert are not wanted by the community."Whoever was behind this incident should explain to local residents what they have achieved by forcing families from their homes."The people of this area want to get on with their lives and trying to improve the future for their children without elements causing distress and inconvenience." © UTV Share Share Share


text:
the conceptual filmmaker stephanie dodes hired me to take documentary photographs of the making of her first film "everything for nothing". this is the result.
Comment posted.
Log in or create an account to post a comment.
"to be framed within what is reasonable" Published July 19, 2013
"solid gold" 3rd generation Published December 03, 2011
"faute de mieux" Published December 03, 2011
"can you listen to the sound of your own heartbeat?" Published December 03, 2011
"delirium drives him" Published December 05, 2010
"all the right pretenses except will" Published February 14, 2009
"solid gold" 2nd generation part 3 Published January 26, 2009
"solid gold" 2nd generation part 2 Published January 26, 2009


text:
Pressure Suit Coverlayer, G4-C, White, Gemini 4
This is the original cover-layer from the spacesuit worn by astronaut Ed White on the Gemini 4 mission in June 1965. The cover-layer is made of high-temperature nylon, later called Nomex, and was designed to provide thermal protection for the astronaut during the mission.
The cover-layer was removed in 1986 due the major deterioration of the nylon, and it was replaced by the spacesuit manufacturer with a replica layer. This original layer is kept in environmental storage.
NASA transferred the suit to the Museum in 1967.
Transferred from NASA - Manned Spacecraft Center
- Country of Origin
- United States of America
- Manufacturer
- David Clark Company, Inc.
- Astronaut
- Edward H. White, II
- Type
- PERSONAL EQUIPMENT-Pressure Suits
- Materials
- Overall: High-Temperature nylon
- Lacing: Nylon
- Dimensions
- Approximate: 4ft 7in. x 2ft 1in. x 6in. (139.7 x 63.5 x 15.24cm)


text:
LeBron James is becoming his own hyperbole, his game better than anything performed at the Grammys on Sunday night. The real show has become what King James is doing every game, so fine tuned is his game right now with his fifth 30-point and 60-percent shooting game in a row. The Lakers held tough and made the game interesting, and Kobe kept up his end of the deal with 28 points, six boards and nine dimes in Miami's 107-97 win. Dwyane Wade was indispensable in this one, too, with 30 points and an up-and-under fast-break dunk over Dwight Howard that looked more like "old Dwyane" than almost anything he's done this year after offseason knee surgery. He deserved all the attention from Kobe guarding him nearly the entire time, leaving Metta World Peace to stay on the island no person wants to visit: guarding LeBron (32 points, seven boards, four assists). In a couple notable stretches, James took MWP's odd open stance and ran to the rim for an and-one with five seconds left on the shot clock, then did the same the next time down as the third quarter ended. When he missed a free throw, the ball got popped out to LBJ for a cold-blooded three. You knew it then this game was over… or maybe it was Norris Cole's impossibly high, over-the-shoulder oop to James in the open court — he jumped from about 12 feet out — that did it. It's all starting to blend together. … Someone has emerged in every win since Rajon Rondo went down for Boston, and Sunday it was Paul Pierce's time. The Truth had an amazing night with 27 points, 14 boards, 14 dimes, a three to send the game into 3OT and a 118-114 triple OT win that broke Denver's nine-game win streak. This is the team that will not die right now. Jason Terry, after one of his worst starts to a season, stroked with 26 points, and KG had 20 and 18 boards. Will the All-Star break help or hurt this team's momentum? … Andre Miller is usually the Nugs' closer but he let Terry steal the ball from him in the final minute, then went for the game-winning three (CLANK) with about 13 seconds left. That couldn't have been the play drawn up. … The sure sign of how good of a Sunday it was is knowing Carmelo Anthony's 42-point night is the third game mentioned. He lost to the Clippers 102-88 after Chris Paul (25 points) shook the rust off and Blake Griffin (17 and 17) treated Madison Square Garden like a SlamBall arena with a couple of seismic dunks. The Tribe Called Bench is slowing reforming into its old self, as evidence by Jamal Crawford getting 27 points, and five reserves having a plus/minus of at least plus-10 (no LAC starter was better than plus-five). … Hit the jump to read about the best point guard of the night …
LeBron Runs Through L.A.; Paul Pierce Won't Let Boston Lose
By: uproxx 02.11.13
Around The Web
Join The Discussion: Log In With
This 28-Year-Old Master Craftsman Has A Knack For Carving Out Works Of Art
By: Gregg Rosenzweig 05.11.16
Presented By
Coors Banquet


text:
BATTLE GROUND — Battle Ground has postponed its controlled burn of a deteriorated, unused school building until next month to allow more time for public comment, officials said.
Firefighters were scheduled to set the Central School ablaze Dec. 10. Officials postponed the date to Saturday, Jan. 21, to allow more comments, particularly from various public agencies. Weather conditions could have forced a ban on outdoor burning next weekend, Battle Ground officials said, citing the Southwest Washington Clean Air Agency.
Area firefighters will continue using the building for training through Dec. 9.
The brick giveaway associated with the Central School has been delayed to take place in conjunction with the new burn date.
The Central School was built in 1941. It was last occupied in 2001.
You can check http://battlegroundps.org for updates, including details about the brick giveaway, as the Jan. 21 burn date approaches.